ここに同様の質問があります:
メソッドの引数と戻り値の型を知っていることを前提としています。少し違うことをしたいと思います。代わりにラムダ関数を取る System.Reflection の .GetMethod(string) のバージョンを作成しようとしています-その代わりに:
MethodInfo methodInfo = typeof(MyClass).GetMethod("AddThing");
よりコンパイルセーフなものを使用できます:
MethodInfo methodInfo = ReflectionHelper.GetMethod<MyClass>(mc => mc.AddThing);
したがって、ReflectionHelper が引数の数と戻り値の型を事前に知っていれば、答えは単純なものになります。たとえば、引数がなく、文字列が返される場合:
public static MethodInfo GetMethod<T, TReturn>(Expression<Func<T, Func<TArg, TReturn>>> expr)
{
return ((MethodCallExpression)expr.Body).Method;
}
引数のカウント/戻り値の型が事前にわからないことを除いて、すべてのケースではなくほとんどのケースをカバーする 20 のオーバーロードでスパムするのは避けたいと思います。
それで、どうすればいいですか?