如何以类似C#的python风格实现多个返回值
我有一个python脚本:如何以类似C#的python风格实现多个返回值,c#,python,function,C#,Python,Function,我有一个python脚本: def f(): a = None b = None return (a, b) a, b = f() 在python中实现多个返回值非常容易。 现在我想在C#中得到同样的结果。我尝试了几种方法,比如returnint[]或KeyValuePair。但这两条路看起来都不优雅。我想知道一个令人兴奋的解决办法。非常感谢。不幸的是,C#不支持这一点。最接近的方法是使用out参数: void f(out int a, out int b) {
def f():
a = None
b = None
return (a, b)
a, b = f()
在python中实现多个返回值非常容易。
现在我想在C#中得到同样的结果。我尝试了几种方法,比如returnint[]或KeyValuePair。但这两条路看起来都不优雅。我想知道一个令人兴奋的解决办法。非常感谢。不幸的是,C#不支持这一点。最接近的方法是使用out
参数:
void f(out int a, out int b) {
a = 42;
b = 9;
}
int a, b;
f(out a, out b);
使用类
公共元组f()
{
Tuple myTuple=新的Tuple(5,5);
返回myTuple;
}
你显然可以做到
object F(out object b)
{
b = null;
return null
}
object b;
var a = F(out b)
但最好使用功能性风格的元组
Tuple<object, object> F()
{
return Tuple.Create<object, object>(null, null);
}
var r = F();
var a = r.Item1;
var b = r.Item2;
这似乎是支付语义好处的一个小代价。此功能在C#7和.Net 4.7中提供
private (string a, string b) f()
{
return (a: null, b: null);
// or simply: return (null, null);
}
var (a, b) = f();
Tuple类稍微优雅一点,多个返回值是一件好事吗?函数应该能够返回匿名类型吗?您可以尝试F#,它支持这一点:
let F()=(14,29)
然后let(a,b)=F()
@Jodrell它们确实非常有用。例如,F#处理TryParse
比C#要简洁得多,因为它将参数作为元组的一部分返回:let(success,result)=Int32.TryParse(someString)
@phoog,考虑到这一点,我倾向于同意,只要定义了元组中的类型,与OPs示例不同,它喜欢传递引用参数吗?@JunHU:我不明白-什么是“it”?F#是类型安全的,但也可以使用let fx=(x*2,x*x)
和let(a,b)=f5
,分别将值10和25分配给a和b。
struct FResult
{
public object A;
public object B;
}
FResult F()
{
return new FResult();
}
var r = F();
var a = F.A;
var b = F.B;
private (string a, string b) f()
{
return (a: null, b: null);
// or simply: return (null, null);
}
var (a, b) = f();