この質問と同様にout
、型を定義することなく、メソッドから暗黙的に型指定された変数にパラメーターをプルできるかどうかを確認することにしました。私の理想的なソリューションは次のようになります。
var result = LiftOutParam((out p1, out p2, out p3) => {
return CallMyMethod(i1, i2, out p1, out p2, out p3);
});
var o1 = result.Item1;
var o2 = result.Item2;
var o3 = result.Item3;
var returnValue = result.Item4;
この場合、CallMyMethod
2 つの通常の入力変数、3 つout
のパラメーター、および戻り値があります。に渡されたデリゲートのセマンティクスに基づいてo1
、 、o2
、o3
、およびの型をコンパイラが自動的に決定するようにします。そのため、出力パラメーターの組み合わせごとに、いくつかのヘルパー デリゲートとメソッドを作成しました。3 つのパラメーターの例を次に示します。returnValue
LiftOutParam
out
public delegate TReturn Lift<T1, T2, T3, TReturn>(
out T1 o1, out T2 o2, out T3 o3);
public static Tuple<T1, T2, T3, TReturn> LiftOutParam<T1, T2, T3, TReturn>(
Lift<T1, T2, T3, TReturn> Lift) {
T1 o1;
T2 o2;
T3 o3;
TReturn ret = Lift(out o1, out o2, out o3);
return new Tuple<T1, T2, T3, TReturn>(o1, o2, o3, ret);
}
理論的には、コンパイラはデリゲートのセマンティクスに基づいて、、、、および型T1
を判別できるはずです。ただし、デリゲートの各パラメーターの型を指定しない限り、上記のコードはコンパイルされません。T2
T3
TReturn
(out p1, out p2, out p3) => { return CallMyMethod(i1, i2, out p1, out p2, out p3); }
out
私が達成しようとしていることを行う方法はありますか? out
どこでも型を明示的に定義しなくても、パラメーターの値を暗黙的に型指定されたローカル変数にプルできる汎用ヘルパー メソッドを作成するには?