函数想返回多个值, 该怎么办

gbstack08 2012-03-17 02:28:31
首要条件是容易读懂

比如getCredentials()这个函数要返回username,password这两个值, 该用什么方法最好(花最少的代价读懂)

已知方法:
函数值作为数组传回(可能需要看函数内容来看返回值)
把这些函数值的这种组合封装成一个类(需要看这个类来了解怎么取返回值)
传入引用(仅仅为了返回值传入参数)
全局变量(如果有好的理由用全局变量, 请指教)

有没有别的方法?
...全文
1236 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
__期待ing 2012-03-21
  • 打赏
  • 举报
回复
我最长用的是OUT这个方式
裸奔在上海 2012-03-20
  • 打赏
  • 举报
回复
如果是同数据类型的,可以用key,value的格式如字典返回,如果数据类型不一样,有值类型,有引用类型的,建议还是用 ref 或者 out 返回,ref:既是传入参数也是传出参数,out:只作为传出参数使用。一般按照楼主的user,password 这个应该会被设计为一个类,那么直接传出这个类就可以了啊,还为什么要这么费力的搞呢?
gw6328 2012-03-20
  • 打赏
  • 举报
回复
一般这两个是一个类的 属性吧。直接用类就行了。
要是定死了就是两个字符串,感觉数组很不错。
烧饼vs馒头 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 bin381 的回复:]
我觉得结构比较好~省内存。开销少
[/Quote]
完全同意 ,如果是值类型的就用结构体,本人觉得是最好的方法了。引用类型的就封装吧。
allen0118 2012-03-19
  • 打赏
  • 举报
回复
直接返回一个DataTalbe,需要哪个值就直接取里面的那个值,OK?

eg:

string PN80, PN, Customer,;

PN80 = ds.Tables["[Sheet1$]"].Rows[i]["PN80"].ToString().Trim();

PN = ds.Tables["[Sheet1$]"].Rows[i]["PN"].ToString().Trim();

Customer = ds.Tables["[Sheet1$]"].Rows[i]["Customer"].ToString().Trim();
猴头 2012-03-19
  • 打赏
  • 举报
回复
out 挺方便,如果分要通过return返回多个值,那就自己封装各类,或者结构体。
发证方法挺多
youzelin 2012-03-19
  • 打赏
  • 举报
回复
楼主结贴吧
bigbaldy 2012-03-19
  • 打赏
  • 举报
回复
就返回类吧,扩展性好。。。。。。。。。。。。。。。
lfqsy 2012-03-19
  • 打赏
  • 举报
回复
list也包含在结构体里面,所以还是结构体好,不论多少
  • 打赏
  • 举报
回复
+1[Quote=引用 5 楼 wanghui0380 的回复:]

4楼这也太将就了,如果这么将就那Tuple<string,string> 也成

问题就像lz说里,这么将就你还非要回去看看,写的人到底把user放那里了,是key还是value,没源代码的话都只能猜了
[/Quote]
gbstack08 2012-03-19
  • 打赏
  • 举报
回复
结贴了, 谢谢大家
#blackheart 2012-03-19
  • 打赏
  • 举报
回复

namespace System.ServiceModel.Security
{
// 摘要:
// 表示基于用户名和密码的客户端凭据。
public sealed class UserNamePasswordClientCredential
{
// 摘要:
// 获取或设置密码。
//
// 返回结果:
// 密码。
public string Password { get; set; }
//
// 摘要:
// 获取或设置用户名。
//
// 返回结果:
// 用户名。
public string UserName { get; set; }
}
}

系统提供的
  • 打赏
  • 举报
回复
我觉得结构比较好~省内存。开销少
sxldfang 2012-03-18
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 sp1234 的回复:]
基本的判断很简单:这是业务吧?这个所谓的设计明显是刻意缺少东西了吧?那么好,这就是说用不了几天我就要从两个属性变为8个属性!
[/Quote]

我也赞同~~~
hetengfei_ 2012-03-18
  • 打赏
  • 举报
回复
纯手写,没有调式,你自已试试。
hetengfei_ 2012-03-18
  • 打赏
  • 举报
回复
//如下用法:
MessageBox.Show("用户名:"+getCredentials()[0]+"密码:"+getCredentials()[1],"提示");
hetengfei_ 2012-03-18
  • 打赏
  • 举报
回复
public object getCredentials()
{
var obj = new List<string>(){ "小海","123456"};
return obj;
}

//如下用法:
MessageBox.Show("用户名:"+getCredentials()[0]+"密码:"+getCredentials()[0],"提示");
happytonice 2012-03-18
  • 打赏
  • 举报
回复
out挺便捷
nonocast 2012-03-18
  • 打赏
  • 举报
回复
out呗,标准解法
风萧萧 2012-03-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 gbstack08 的回复:]
引用 14 楼 youzelin 的回复:

你返回一个数组不就行了。不过话说回来,一般不这么做,按照你的需求,应该自己封装一个 User 类最为妥当。
简单的话用数组,比较有扩展型,万一你以后要返回 3 个,也不用改。

public string[] GetUserNameAndPswd(...)
{
// ......
return new string[] { userNa……
[/Quote]
扩展性+1
嘿嘿。。
加载更多回复(23)

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧