2017-02-23 9 views
4

다음 코드에서 메서드 변수가 null 인 이유는 무엇입니까?메서드가 확실히 존재하는 경우에도 Type.GetMethod()가 null을 반환합니다.

Type[] typeArgs = { typeof(SomeClass) }; 
var listRef = typeof(List<>); 
var list = Activator.CreateInstance(listRef.MakeGenericType(typeArgs)); 
var method = list.GetType().GetMethod("Add‌​", BindingFlags.Default, null, typeArgs, null); 

나는 많은 다른 과부하 및 BindingFlags의 시도했지만 여전히 List<SomeClass>.Add(SomeClass item)에 대한 MethodInfo를 얻을 적이 없다.

확실히 누락되었지만 어떤 도움을 주시면 감사하겠습니다.

+1

'BindingFlags.Default' ->'BindingFlags.Instance | BindingFlags.Public'를,'' "추가"->'' "추가"를 선택합니다. – PetSerAl

+0

나는 또한'BindingFlags.Instance | BindingFlags.Public'을 시도했으며,''추가 '->'추가 ''무엇을 의미하는지 이해하지 못합니다. –

+0

''.Length'를 추가하십시오. ''추가하기 ''를 복사하여 붙여 넣으시고 새 것을 입력하지 마십시오. – PetSerAl

답변

6

문자열 "추가"에 두 개의 보이지 않는 문자 0x00 0x00이 있는데, 이것이 작동하지 않는 이유 중 하나입니다. 복사/붙여 넣기 작업을 한 것처럼 보입니다.

다음으로, BindingFlags.Public | BindingFlags.Instance에 바인딩 플래그를 변경 :

using System; 
using System.Collections.Generic; 
using System.Reflection; 

namespace GenericReflection 
{ 
    class Program 
    { 
     static void Main() 
     { 
      Type[] typeArgs = { typeof(SomeClass) }; 
      var listRef = typeof(List<>); 
      var list = Activator.CreateInstance(listRef.MakeGenericType(typeArgs)); 
      var method = list.GetType().GetMethod("Add", BindingFlags.Public | BindingFlags.Instance, null, typeArgs, null); 
      Console.WriteLine(method); 
      Console.ReadLine(); 
     } 
    } 

    internal class SomeClass 
    { 
    } 
} 
+0

잘 잡으세요! 보이지 않는 캐릭터는 어떻게 보셨습니까? 나는 "Add"문자열을 입력하고 처음에는 올바른 BindingFlags를 가졌기 때문에 정말 놀랍습니다. 그것이 작동하지 않을 때, 나는 그것을 작동 시키려고 노력하는 몇 가지 것을 복사하고 붙여 넣었다. –

+4

@ShaneRay : 확률은 좋지만 Thomas Weller의 첫 번째 로데오가 아닙니다. :-) 이것을 몇 번 보았을 때, 너비가 0 인 공백, 바이트 순서 표시, 0 문자가 포함되어 있는지, 문자 "A"는 U가 아닌 U + 0410 (키릴 문자)인지 여부를 확인하는 것에 관해서는 반사적입니다. +0041 (라틴), 등등. –

+2

음, 먼저 코드를 복사/붙여 넣습니다. 그것이 작동하지 않을 때, 나는 모든 방법을 준 코드를 작성했다. 분명한 것은, 당신이 작성한 서명이있는 방법이 있다는 것입니다. 이로 인해 16 진수 편집기에서 코드를 볼 수있게되었습니다. –

관련 문제