私は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();