2013-05-28 2 views
5

나는 두 가지 기능을 가지고 방법 :Type.GetMethod 모든 방법을 통해 반복하지 않고 일반 MethodInfo를 가져옵니다

MethodInfo method = typeof(DAL).GetMethod("DeleteRecord", new[] { typeof(int) }); 
MethodInfo generic = method.MakeGenericMethod(returnType); 
object o = generic.Invoke(null, new object[] { dbname, spname, expandoAsDictionary }); 

첫 번째 줄 t 모호한 정의를 찾기 때문에 예외가 발생합니다. 거기에 GetMethods을 사용하지 않고 IsGenericMethod을 묻는 결과를 통해 일반적인 방법의 MethodInfo을 얻을 수있는 방법이 있습니까?

편집 : 두 개의 제안 된 답변 중 하나가 내부 루프 (GetMethods() ... 선택)로 해결 되었기 때문에 '중복'을 제거하거나 오버로드를 해결하지 마십시오.

+0

이것은 중복되지 않습니다. 난 이미 반사와 함께 제네릭 메소드를 호출하는 방법을 알고 있지만 모호한 정의 예외가 있습니다. 제 질문을 읽어주세요. –

+0

복제본이지만 잘못된 질문을 연결했습니다. 죄송합니다 ... 여기에 올바른 것이 있습니다. http://stackoverflow.com/q/5218395/201088. –

+1

여전히 dup! 나는 명시 적으로 GetMethods() 함수를 사용하지 않고 그것을 수행하는 방법을 물었다. 귀하의 링크에 표시된 대답은 그것을 사용하고 있습니다 ... –

답변

0
어쩌면

아닌 문제에 대한 정확한 솔루션,하지만 어쩌면 당신은이 솔루션에 만족하실 수 있습니다 : 너무 GetMethod() 수 호출되어 나는 방법에 대해 "하면 FullName"같이있을 것이라고 생각

var generic = typeof(BadFoo).GetMethods().FirstOrDefault(p => p.IsStatic == true && p.Name == "DeleteRecord" && p.ReturnType == typeof(Int32)); 

고유 한 Method를 얻기위한 FullName. 그러나 이름에는 메서드에 다른 속성이 없습니다.

+0

제 질문을 읽어주십시오. GetMethods()를 사용하지 않고이 작업을 수행하는 방법을 물었습니다. –

+0

내가 말했듯이 이것은 정확한 해결책이 아닙니다. 하지만 적어도 "결과를 반복"하지 않을 것입니다. –

+0

답변을 주셔서 감사합니다. 사용을 고려해 볼 것입니다 ... 해결책이 여전히 높은 수준에있는 방법을 구별 할 방법을 찾고 있습니다. 뒤에서 루프 (FirstOrDefault) –