5

我有一个 python 脚本:

def f():
    a = None
    b = None
    return (a, b)


a, b = f()

在 python 中实现多个返回值非常容易。现在我想在 C# 中实现相同的结果。我尝试了几种方法,例如 return int[] 或 KeyValuePair。但两种方式看起来都不优雅。我想知道一个令人兴奋的解决方案。多谢。

4

4 回答 4

6

使用元组类。

  public Tuple<int,int> f()
  {
        Tuple<int,int> myTuple = new Tuple<int,int>(5,5);
        return myTuple;
  }
于 2013-01-25T09:10:15.257 回答
3

不幸的是,C# 不支持这一点。您可以获得的最接近的是使用out参数:

void f(out int a, out int b) {
    a = 42;
    b = 9;
}

int a, b;
f(out a, out b);
于 2013-01-25T09:07:27.430 回答
2

你显然可以做

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;

这似乎是为语义利益付出的很小的代价。

于 2013-01-25T09:11:51.753 回答
0

此功能在带有 .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();
于 2017-08-02T13:58:13.260 回答