如何从单个函数 return 多个 List<> 值?

How to return Multiple List<> values from a single function?

尝试 return 2 列出来自单个函数的值

我正在使用这个代码:-

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);
    }

我在这里尝试 return 2 List<int> 个值,但出现错误。如何 return 单个函数中的 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);
    }

将您的函数减速更改为

public KeyValuePair<List<int>, List<int>> encrypt(string password)

P.S:我不推荐这个!创建新的 class 是解决您的问题的更好方法

方式 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;
        }

在这种情况下,一个相当巧妙的方法是使用 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!
    */
}
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!
            */


        }

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

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

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

非常简单

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

注意:两个列表将使用相同的 class,因为我在两个列表中使用老师 class。