GetRuntimeMethod를 호출하면 다음과 같은 경우에 null이 반환되는 이유에 대한 단서가 있습니까? 나는 다음과 같은 코드를 실행하여 디버깅을 시도RuntimeReflectionExtensions.GetRuntimeMethod가 예상대로 작동하지 않습니다.
_castMethod = typeof(Enumerable).GetRuntimeMethod("Cast", new Type[] { typeof(IEnumerable) });
: 것은이가하는 것처럼 작동합니다
_toListMethod = typeof(Enumerable).GetRuntimeMethod("ToList", new Type[] { typeof(IEnumerable<>) });
놀랍게도
var bah = typeof (Enumerable).GetRuntimeMethods().Where(m => m.Name.Contains("ToList"));
var derp = bah.First().GetParameters();
는, 첫 번째 줄은 반환 내가 얻으려고하는 MethodInfo를 포함하는 콜렉션과 두 번째 라인은 예상되는 매개 변수 유형이 IEnumerable <>임을 확인합니다.
두 가지 메서드 서명인 Cast와 ToList는 비슷하며 ToList에 대한 MethodInfo를 가져 오는 것이 실패하는 이유가 없습니다.
이 코드는 TargetFrameworkProfile이 Profile78로 설정된 휴대용 클래스 라이브러리에서 실행됩니다.
감사합니다.
업데이트 : 나는 좋은 해결책이 될 때까지, 나를 위해 작동 한 추한 해결 방법은 : 나는 서명을 보였다
_toListMethod = typeof(Enumerable).GetRuntimeMethods().First(m => m.Name.Contains("ToList"));
좋은 지적. Cast 메서드에 제네릭이 아닌 매개 변수 형식이 있습니다. 나는 당신과 동의합니다, 일반적인 매개 변수 유형과 관련이있는 것처럼 보입니다. –
@TiagoMargalho 나는 가능한 확장 메소드를 추가했다. (가능한 한 복사 - 붙여 넣기가 아무 것도 깨지 않았 음) 가능한 메소드를 거치고 타입 매개 변수의 이름으로 검사했다. 이 경우에는 훌륭하게 작동하지만 위험한 길을 걸을 수 있다고 생각합니다 :) – flindeberg