尝试从单个函数返回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);
}
答案 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类相同的类。