모호한 일치 예외 방지


115

컴파일 타임에 개체의 유형을 알지 못하기 때문에 리플렉션을 통해 유형에 대해 정적 메서드 Parse 를 호출하고 있습니다 (하지만 Parse 메서드가 있고 문자열을 사용함).

그러나 모호한 일치 예외가 발생합니다. 아마도 각각 단일 개체 (문자열, 정수, 이중 등)를 사용하는 오버로드 된 Parse 메서드 가 많기 때문일 것 입니다.

올바른 메서드 ( Parse (string s) )에 도달 하고 예외가 throw되지 않도록 메서드 호출을 더 구체적으로 지정할 수있는 방법은 무엇입니까 ?

내 코드는 다음과 같습니다.

Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });

답변:


193

사용 과부하 및 사용

returnType.GetMethod("Parse", new [] {typeof(string)})

9
@Bitterblue 나는 왜 당신이 그 코멘트를 쓰는지 혼란 스럽습니다-그리고 왜 당신은 토론 할 가치가있는 스타일 문제를 고려합니까?
Benjamin Podszun

9
프레젠테이션은 괜찮습니다. 선호하는 스타일과 다른 스타일을 따르는 것뿐입니다. 당신은 "조금 더 푸르스름하다면이 자전거 창고를 사용할 것입니다"라는 문구를 따라 논평했습니다. 저를 혼란스럽게합니다. 주석을 편집 : 새 [] {} 실제로 배열의 유형을 추론하고 있음을 인식 아니라면 IS 이 경우 새로운 유형 []에 해당? 이 경우 미안합니다. 스 니펫이 잘못되었다고 생각하면서 스타일 (둘 다 작동 함)에 대해 댓글을 달았다 고 가정했습니다.
Benjamin Podszun

1
답 해주셔서 감사합니다. 다음 사람에게 문제를 해결하려면 참조 유형에 대해 다음과 같이 사용하십시오. typeof (string) .MakeByRefType ();
BRebey

5
@Bitterblue 나는 '젊은'이 아니고 확실히 어리석은 소리입니다. 읽을 수없는 프로그래머 new [] { typeof(string) }는 코드 유지 외에 다른 문제가 있습니다. 유형은 말 그대로 바로 거기에 있습니다. 게다가 '미친 한 줄'은 관련이 없으며 선호하는 스타일은 바로이 줄에 중복 문자를 추가합니다. new Type[] {...}줄이 길고 관련이없는 정보 / 상용문 / 노이즈이기 때문에 읽기가 쉽지 않다고 주장합니다 . 따라서 : 그것은 스타일의 문제이고 당신은 수동적 인 공격적 '내 취향에
맞으면

2
두 메서드가 동일한 이름, 동일한 수의 매개 변수 및 동일한 유형의 매개 변수를 갖는 경우에는 작동하지 않습니다. 여기서 명시적인 캐스트 연산자 오버로드를 생각하고 있습니다. 예를 들어 public static explicit double(MyType obj)public static explicit float(MyType obj). 여전히 AmbiguousMatchException. 이 경우 returnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float))예를 들어 사용할 수 있습니다 .
Guillaume
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.