日期:2014-05-18  浏览次数:20834 次

函数想返回多个值, 该怎么办
首要条件是容易读懂

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

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

有没有别的方法?

------解决方案--------------------
如果只是返回2个值,那么就返回一个KeyValuePair<string,string>类型的键值对
------解决方案--------------------
需要看这个类来了解怎么取返回值?????

为啥需要看这个类才知道呢??微软这个框架那么多方法都提供这样的返回,按你说滴,我要去看这个类还要了解,那我们得学到何年何月去来着。
------解决方案--------------------
你返回一个数组不就行了。不过话说回来,一般不这么做,按照你的需求,应该自己封装一个 User 类最为妥当。
简单的话用数组,比较有扩展型,万一你以后要返回 3 个,也不用改。

public string[] GetUserNameAndPswd(...)
{
// ......
return new string[] { userName, password };
}
------解决方案--------------------
直接返回一个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();
------解决方案--------------------
C# code

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