我读了这个问题的c++版本,但并没有真正理解它。
有人能解释清楚,如果它可以在c#中完成,以及如何?
我读了这个问题的c++版本,但并没有真正理解它。
有人能解释清楚,如果它可以在c#中完成,以及如何?
当前回答
当你的方法是异步的,你想返回多个属性。你必须这样做:
public async Task<(int, int)> GetMultipleValues(){
return (1,2);
}
其他回答
方法:
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 ->纳秒
参考:多个返回值。
在c# 7中有一个新的元组语法:
static (string foo, int bar) GetTuple()
{
return ("hello", 5);
}
你可以返回一个记录:
var result = GetTuple();
var foo = result.foo
// foo == "hello"
你也可以使用新的解构器语法:
(string foo) = GetTuple();
// foo == "hello"
但是要小心序列化,所有这些都是语法糖——在实际编译的代码中,这将是一个Tuple<string, int>(根据接受的答案),包含Item1和Item2,而不是foo和bar。这意味着序列化(或反序列化)将使用这些属性名。
因此,对于序列化,声明一个记录类并返回它。
c# 7中的另一个新特性是改进了out形参的语法。你现在可以内联声明out,这在某些情况下更适合:
if(int.TryParse("123", out int result)) {
// Do something with result
}
但是,大多数情况下,您将在. net自己的库中使用它,而不是在您自己的函数中。
<--Return more statements like this you can -->
public (int,string,etc) Sample( int a, int b)
{
//your code;
return (a,b);
}
你可以收到类似的代码
(c,d,etc) = Sample( 1,2);
我希望它能奏效。
c#的未来版本将包括命名元组。 看看channel9的演示 https://channel9.msdn.com/Events/Build/2016/B889
跳到13:00讲元组的内容。这将允许如下内容:
(int sum, int count) Tally(IEnumerable<int> list)
{
// calculate stuff here
return (0,0)
}
int resultsum = Tally(numbers).sum
(视频中不完整的例子)
如果你的意思是返回多个值,你可以返回一个包含你想返回的值的类/结构,或者在参数上使用"out"关键字,如下所示:
public void Foo(int input, out int output1, out string output2, out string errors) {
// set out parameters inside function
}