これは、私が以前に尋ねた別の質問に関連する質問です。オーバーロードされたメソッドがあります:
public void Add<T>(SomeType<T> some) { }
public void Add<T>(AnotherType<T> another) { }
振り返ってそれぞれの方法を見つけるにはどうすればよいですか?Add<T>(SomeType<T> some)例:リフレクションでメソッドを取得するにはどうすればよいですか?手伝ってくれませんか。前もって感謝します。
これは、私が以前に尋ねた別の質問に関連する質問です。オーバーロードされたメソッドがあります:
public void Add<T>(SomeType<T> some) { }
public void Add<T>(AnotherType<T> another) { }
振り返ってそれぞれの方法を見つけるにはどうすればよいですか?Add<T>(SomeType<T> some)例:リフレクションでメソッドを取得するにはどうすればよいですか?手伝ってくれませんか。前もって感謝します。
ここでの秘訣は、パラメータを、にすることを説明することです。ここでSomeType<T>、はメソッドTのジェネリック型です。Add
それ以外は、CastroXXLが彼の回答で提案したように、標準のリフレクションを使用するだけです。
これが私がそれをした方法です:
var theMethodISeek = typeof(MyClass).GetMethods()
.Where(m => m.Name == "Add" && m.IsGenericMethodDefinition)
.Where(m =>
{
// the generic T type
var typeT = m.GetGenericArguments()[0];
// SomeType<T>
var someTypeOfT =
typeof(SomeType<>).MakeGenericType(new[] { typeT });
return m.GetParameters().First().ParameterType == someTypeOfT;
})
.First();
MethodInfoメンバーを調べます:http://msdn.microsoft.com/en-US/library/system.reflection.methodinfo_members(v = vs.80).aspx
とのヘルパープロパティがIsGenericMethodDefinitionありGetParametersます。どちらも、どの機能が何であるかを理解するのに役立ちます。