我读了这个问题的c++版本,但并没有真正理解它。
有人能解释清楚,如果它可以在c#中完成,以及如何?
我读了这个问题的c++版本,但并没有真正理解它。
有人能解释清楚,如果它可以在c#中完成,以及如何?
当前回答
现在c# 7已经发布了,您可以使用新包含的元组语法
(string, string, string) LookupName(long id) // tuple return type
{
... // retrieve first, middle and last from data storage
return (first, middle, last); // tuple literal
}
然后可以这样使用:
var names = LookupName(id);
WriteLine($"found {names.Item1} {names.Item3}.");
您还可以为元素提供名称(因此它们不是“Item1”、“Item2”等)。你可以通过在签名或返回方法中添加一个名字来实现:
(string first, string middle, string last) LookupName(long id) // tuple elements have names
or
return (first: first, middle: middle, last: last); // named tuple elements in a literal
它们也可以被解构,这是一个非常好的新功能:
(string first, string middle, string last) = LookupName(id1); // deconstructing declaration
查看这个链接,看看更多的例子可以做什么:)
其他回答
要么返回类实例,要么使用out参数。这里有一个out参数的例子:
void mymethod(out int param1, out int param2)
{
param1 = 10;
param2 = 20;
}
这样叫它:
int i, j;
mymethod(out i, out j);
// i will be 20 and j will be 10
如果你的意思是返回多个值,你可以返回一个包含你想返回的值的类/结构,或者在参数上使用"out"关键字,如下所示:
public void Foo(int input, out int output1, out string output2, out string errors) {
// set out parameters inside function
}
一些答案建议使用out参数,但我建议 不使用这个,因为它们不与异步方法一起工作。看到 这是更多的信息。
其他的答案是使用Tuple,我也会推荐它,但是使用c# 7.0中引入的新特性。
(string, string, string) LookupName(long id) // tuple return type
{
... // retrieve first, middle and last from data storage
return (first, middle, last); // tuple literal
}
var names = LookupName(id);
WriteLine($"found {names.Item1} {names.Item3}.");
更多信息可以在这里找到。
你可以试试这个
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
方法:
1) KeyValuePair(最佳性能- 0.32 ns):
KeyValuePair<int, int> Location(int p_1, int p_2, int p_3, int p_4)
{
return new KeyValuePair<int,int>(p_2 - p_1, p_4-p_3);
}
2)元组- 5.40 ns:
Tuple<int, int> Location(int p_1, int p_2, int p_3, int p_4)
{
return new Tuple<int, int>(p_2 - p_1, p_4-p_3);
}
3) out (1.64 ns) or ref 4)创建自己的自定义类/结构
Ns ->纳秒
参考:多个返回值。