如何从单个函数 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。
尝试 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。