5

これは、私が以前に尋ねた別の質問に関連する質問です。オーバーロードされたメソッドがあります:

public void Add<T>(SomeType<T> some) { }

public void Add<T>(AnotherType<T> another) { }

振り返ってそれぞれの方法を見つけるにはどうすればよいですか?Add<T>(SomeType<T> some)例:リフレクションでメソッドを取得するにはどうすればよいですか?手伝ってくれませんか。前もって感謝します。

4

2 に答える 2

6

ここでの秘訣は、パラメータを、にすることを説明することです。ここで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();
于 2012-05-05T19:09:02.633 に答える
0

MethodInfoメンバーを調べます:http://msdn.microsoft.com/en-US/library/system.reflection.methodinfo_members(v = vs.80).aspx

とのヘルパープロパティがIsGenericMethodDefinitionありGetParametersます。どちらも、どの機能が何であるかを理解するのに役立ちます。

于 2012-05-05T18:52:32.173 に答える