如何返回多个列表<>单个函数的值?

时间:2015-12-26 05:14:31

标签: c# list function keyvaluepair

尝试从单个函数返回2个List值

我正在使用此代码: -

public KeyValuePair<int, int> encrypt(string password)
    {
        List<int> key = new List<int>();
        List<int> code = new List<int>();
        /*
           do stuff, do some more stuff and go!
        */

        return new KeyValuePair<List<int>,List<int>>(key,code);
    }

这里我试图返回2 List<int>个值但发生错误。如何从单个函数返回2个列表值

更新

答案是找到的,我们得到了2个正确答案,这就是为什么我不只是选择一个原因而且工作都很好

通过 HadiRj

回答

通过 Enigmativity

回答

如果你想使用我的代码,那么这是它的正确版本: -

public KeyValuePair<List<int>, List<int>> encrypt(string password)
    {
        List<int> key = new List<int>();
        List<int> code = new List<int>();
        /*
           do stuff, do some more stuff and go!
        */

        return new KeyValuePair<List<int>,List<int>>(key,code);
    }

6 个答案:

答案 0 :(得分:6)

在这种情况下,一个相当简洁的方法是使用out参数。

public void encrypt(string password, out List<int> key, out List<int> code)
{
    key = new List<int>();
    code = new List<int>();
    /*
       do stuff, do some more stuff and go!
    */
}

答案 1 :(得分:3)

将功能减速度更改为

public KeyValuePair<List<int>, List<int>> encrypt(string password)
P.S:我不推荐这个!创建新类更适合处理您的问题

答案 2 :(得分:2)

方式1:元组:

       public Tuple<List<int>, List<int>> func()
    {
        List<int> key = new List<int>() { 2,34,5};
        List<int> code = new List<int>() { 345,67,7};
        return Tuple.Create<List<int>,List<int>>(key, code);

    }

方式2:

视图模型

    public class retViewModel
{
    public List<int> key { get; set; }
    public List<int> code { get; set; }
}



public retViewModel func()
        {
            List<int> key = new List<int>() { 2,34,5};
            List<int> code = new List<int>() { 345,67,7};
            retViewModel obj = new retViewModel() { 
            code=code,
            key=key
            };
            return obj;
        }

答案 3 :(得分:2)

List<int> key;
List<int> code;
static void Main(string[] args)
        {
            key = new List<int>();
            code = new List<int>();
            encrypt("",ref key,ref code);
        }
  public void encrypt(string password, ref List<int> key, ref List<int> code)
        {

            /*
               do stuff, do some more stuff and go!
            */


        }

答案 4 :(得分:2)

您随时可以返回List<List<int>>。从我的代码中可以看出,你使用KVP的唯一原因是因为你知道你将返回两个列表。然后我会说创建另一个对象,你可以拥有密钥和代码:

 public class EncryptionResult
 {
     public IList<int> Key {get; set;}
     public IList<int> Code {get; set;}
 }

我建议您不要使用其他评论建议的out / ref解决方案。使用它们返回几个参数并不是一个好的做法,应该避免它们。此外,如果您在任何时间点扩展/修改该对象,因为您需要更多不同的数据,您不需要更改接口的签名,但是如果您更改参数,则需要修改每个方法和调用者需要(包括你所有的测试)。

答案 5 :(得分:2)

非常简单

[WebMethod]
public static List<Teacher>[] BindData()
{
   List<Teacher> list1 = new List<Teacher>();
   List<Teacher> list2 = new List<Teacher>();
   return new List<Teacher>[] { list1, list2 };
}

注意:两个列表都将使用与我在两个列表中使用的Teacher类相同的类。