首要条件是容易读懂比如getCredentials()这个函数要返回username,password这两个值, 该用什么方法最好(花最少的代价读懂)已知方法:
函数值作为数组传回(可能需要看函数内容来看返回值)
把这些函数值的这种组合封装成一个类(需要看这个类来了解怎么取返回值)
传入引用(仅仅为了返回值传入参数)
全局变量(如果有好的理由用全局变量, 请指教)有没有别的方法?

解决方案 »

  1.   

    如果只是返回2个值,那么就返回一个KeyValuePair<string,string>类型的键值对
      

  2.   

    1. 函数值作为数组传回(可能需要看函数内容来看返回值)
    2. 把这些函数值的这种组合封装成一个类(需要看这个类来了解怎么取返回值)
    3. 传入引用(仅仅为了返回值传入参数)
    4. bool getCredentials(out string password, out string username); 建议使用4
      

  3.   


     KeyValuePair<string, string> getCredentials()
            {
                return new KeyValuePair<string, string>("userA", "password");
            }var keyValue  = getCredentials();
                string user = keyValue.Key;
                string password = keyValue.Value;
      

  4.   

    4楼这也太将就了,如果这么将就那Tuple<string,string> 也成问题就像lz说里,这么将就你还非要回去看看,写的人到底把user放那里了,是key还是value,没源代码的话都只能猜了
      

  5.   

    不是大道理,一句话你总要负责任把。不负责就来!!!按照你7说主题是说了返回2个值用什么方法最好,所以你切题是把那昨天你咋不说主题是MVVM却去说WPF,那人不切题,跑题了呢
      

  6.   

    你就是事啊,看lz怎么问滴你们就喜欢掐头去尾 WPF with MVVM 硬是就成了 MVVM is WPF楼主这4个括号 (可能需要看函数内容来看返回值)
             (需要看这个类来了解怎么取返回值)
              (仅仅为了返回值传入参数)
              (如果有好的理由用全局变量, 请指教)硬是让你给吃没了
      

  7.   

    方法名(out string UserName,out string Password)
      

  8.   

    你返回一个数组不就行了。不过话说回来,一般不这么做,按照你的需求,应该自己封装一个 User 类最为妥当。
    简单的话用数组,比较有扩展型,万一你以后要返回 3 个,也不用改。public string[] GetUserNameAndPswd(...)
    {
        // ......
        return new string[] { userName, password };
    }
      

  9.   

    谢谢大家, 看了你们的建议应该是只有两个值的话有数组(或KeyValuePair,Tuple这类的序列), 如果值多的话用类封装
      

  10.   

    我想的是如果返回一个Crendential对象, 然后获取用户名可能是getUsername(),get_username()一类的, 所以需要去看看类, 然后调用相应的方法.哦, 我说错了, 是需要看类的接口, 不用看类的实现
      

  11.   

    这个办法好,我以前经常有类似的需求,居然一直都没想到,瞻仰,老大就是老大啊...其他方法1.数组(集合)
    2.ref out
    3.封装 成类或者结构体或者接口。
    4.1楼的很好
      

  12.   

    我使用过很多次Tuple<....>,但是有其适用的地方。你这个只有name和password两个属性的问题我肯定也会使用类的。
      

  13.   

    public object getCredentials()
    {
          var obj =  new List<string>(){ "小海","123456"};
          return obj;
    }//如下用法:
    MessageBox.Show("用户名:"+getCredentials()[0]+"密码:"+getCredentials()[0],"提示");
      

  14.   

    //如下用法:
    MessageBox.Show("用户名:"+getCredentials()[0]+"密码:"+getCredentials()[1],"提示");
      

  15.   

    out 挺方便,如果分要通过return返回多个值,那就自己封装各类,或者结构体。
    发证方法挺多
      

  16.   

    list也包含在结构体里面,所以还是结构体好,不论多少
      

  17.   

    直接返回一个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();
      

  18.   


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

  19.   

    如果是同数据类型的,可以用key,value的格式如字典返回,如果数据类型不一样,有值类型,有引用类型的,建议还是用 ref 或者 out 返回,ref:既是传入参数也是传出参数,out:只作为传出参数使用。一般按照楼主的user,password  这个应该会被设计为一个类,那么直接传出这个类就可以了啊,还为什么要这么费力的搞呢?