Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以类似C#的python风格实现多个返回值_C#_Python_Function - Fatal编程技术网

如何以类似C#的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) {

我有一个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) {
    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();