我读了这个问题的c++版本,但并没有真正理解它。
有人能解释清楚,如果它可以在c#中完成,以及如何?
我读了这个问题的c++版本,但并没有真正理解它。
有人能解释清楚,如果它可以在c#中完成,以及如何?
当前回答
当你的方法是异步的,你想返回多个属性。你必须这样做:
public async Task<(int, int)> GetMultipleValues(){
return (1,2);
}
其他回答
要么返回类实例,要么使用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
之前的帖子是对的。c#方法不能返回多个值。然而,你确实有几个选择:
返回一个包含多个成员的结构 返回类的实例 使用输出参数(使用out或ref关键字) 使用字典或键值对作为输出
这里的利与弊通常很难弄清楚。如果您返回一个结构,请确保它很小,因为结构是值类型并传递给堆栈。如果你返回一个类的实例,这里有一些设计模式,你可能想要使用,以避免引起问题-类的成员可以修改,因为c#通过引用传递对象(你不像在VB中那样有ByVal)。
最后,您可以使用输出参数,但我将限制在只有两个(如3个或更少)参数的情况下使用此方法-否则事情将变得丑陋且难以维护。此外,输出参数的使用可能会抑制灵活性,因为每次需要向返回值中添加内容时都必须更改方法签名,而返回结构或类实例时无需修改方法签名即可添加成员。
从架构的角度来看,我建议不要使用键值对或字典。我发现这种编码风格需要使用方法的代码中的“秘密知识”。它必须提前知道键将是什么,值的含义是什么,如果开发人员在内部实现中改变了字典或KVP的创建方式,那么很容易在整个应用程序中创建故障级联。
不,在c#中(对于低于c# 7的版本),你不能从一个函数返回多个值,至少不能像在Python中那样。
然而,也有一些选择:
您可以返回一个object类型的数组,其中包含您想要的多个值。
private object[] DoSomething()
{
return new [] { 'value1', 'value2', 3 };
}
你可以使用out参数。
private string DoSomething(out string outparam1, out int outparam2)
{
outparam1 = 'value2';
outparam2 = 3;
return 'value1';
}
当你的方法是异步的,你想返回多个属性。你必须这样做:
public async Task<(int, int)> GetMultipleValues(){
return (1,2);
}
你可以试试这个KeyValuePair
private KeyValuePair<int, int> GetNumbers()
{
return new KeyValuePair<int, int>(1, 2);
}
var numbers = GetNumbers();
Console.WriteLine("Output : {0}, {1}",numbers.Key, numbers.Value);
输出:
输出:1,2