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 に答える