メソッドのオーバーロードを2つ書き込もうとすると、1つはExpression<Func<T>>
パラメーターを受け入れ、もう1つはを受け入れますFunc<T>
。2つのシグネチャがあいまいさを生み出すため、ラムダ式を使用してメソッドを呼び出そうとするとコンパイラエラーが発生します。たとえば、次の問題が発生します。
Method(() => "Hello"); // Is that a Func<string>,
// or is it an Expression<Func<string>>?
わかりました。Expression<Func<string>>
しかし、これは呼び出し元のコードにラムダ式を使用するように強制するため、単に受け入れるというアプローチは好きではありません。メソッドグループも受け入れられるようにするにはどうすればよいですか?
この質問をするための私の基礎は、私がこのような何かを書くことができるようにしたいいくつかのコードに取り組んでいるということです:
Method(() => "Hello");
...そして次のような出力を取得します:
'()=> "Hello"'を実行し、"Hello"を取り戻しました。
その間、私もこれを実行できるようにしたいと思います。
Method(ReturnHello);
...そして次のような出力を取得します:
「ReturnHello」を実行し、「Hello」を取り戻しました。
ExpressionMethod
2つの異なるメソッド名(たとえば、 )を使用せずに、ここで実行しようとしていることを実行する方法はありますFuncMethod
か?それはそれほど大したことではないだろうと私は理解しています。別の方法があるかどうかだけ知りたいです。