2012-05-05 2 views
5

이것은 another question I asked before과 관련된 질문입니다. 오버로드 된 메소드가 있습니다 :리플렉션으로 오버로드 된 메서드를 찾는 방법

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

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

리플렉션을 통해 각 메소드를 어떻게 찾을 수 있습니까? 예 : 리플렉션을 통해 Add<T>(SomeType<T> some) 메소드를 얻으려면 어떻게해야합니까? 제발 도와 주실 수 있습니까? 미리 감사드립니다. MethodInfo 회원에

답변

6

여기서 설명하는 속임수는 SomeType<T> 매개 변수를 지정하는 것으로 설명됩니다. 여기서 TAdd 메서드의 제네릭 유형입니다.

그 외에도 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(); 
+0

의미가 있습니다. 고마워. –

+0

죄송합니다, 다른 점. 형식이 제네릭 형식의 제약 조건을 따르는 지 검색하는 방법? –

+0

'typeof (SomeType <>). GetGenericArguments(). First(). GetGenericParameterConstraints()'에서 디버거를 들여다보고'Type.IsAssignableFrom' 메서드를보십시오 : http://msdn.microsoft.com/en- 우리/라이브러리/system.type.isassignablefrom.aspx 나는 그들을 결합하면 당신이 원하는 것을 얻을 것이라고 생각 – GolfWolf