我有一个 python 脚本:
def f():
a = None
b = None
return (a, b)
a, b = f()
在 python 中实现多个返回值非常容易。现在我想在 C# 中实现相同的结果。我尝试了几种方法,例如 return int[] 或 KeyValuePair。但两种方式看起来都不优雅。我想知道一个令人兴奋的解决方案。多谢。
使用元组类。
public Tuple<int,int> f()
{
Tuple<int,int> myTuple = new Tuple<int,int>(5,5);
return myTuple;
}
不幸的是,C# 不支持这一点。您可以获得的最接近的是使用out
参数:
void f(out int a, out int b) {
a = 42;
b = 9;
}
int a, b;
f(out a, out b);
你显然可以做
object F(out object b)
{
b = null;
return null
}
object b;
var a = F(out b)
但更好地Tuple
与功能风格一起使用,
Tuple<object, object> F()
{
return Tuple.Create<object, object>(null, null);
}
var r = F();
var a = r.Item1;
var b = r.Item2;
但是,既然在 c# 中你可以是明确的,为什么不定义你的返回类型。
struct FResult
{
public object A;
public object B;
}
FResult F()
{
return new FResult();
}
var r = F();
var a = F.A;
var b = F.B;
这似乎是为语义利益付出的很小的代价。
此功能在带有 .Net 4.7 的 C#7 中可用。
private (string a, string b) f()
{
return (a: null, b: null);
// or simply: return (null, null);
}
var (a, b) = f();