Wywołuję metodę statyczną Parse na typie poprzez odbicie, ponieważ nie znam typu obiektu w czasie kompilacji (wiem jednak, że ma metodę Parse , pobierając ciąg).
Jednak otrzymuję niejednoznaczny wyjątek dopasowania, prawdopodobnie dlatego, że istnieje wiele przeciążonych metod analizy , z których każda pobiera pojedynczy obiekt (ciąg, int, double itp.).
W jaki sposób mogę być bardziej szczegółowy w wywołaniu metody, aby upewnić się, że dotarłem do poprawnej metody ( Parse (string s) ) i nie zostanie zgłoszony wyjątek.
Mój kod wygląda tak:
Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });
c#
reflection
ambiguous-call
Ben Aston
źródło
źródło
new [] { typeof(string) }
ma inne problemy niż konserwacja kodu. Ten typ jest dosłownie tam. Poza tym „szalone jednolinijki” nie są istotne, twój preferowany styl po prostu dodaje zbędne litery do tej samej linii. Twierdzę, żenew Type[] {...}
jest to mniej czytelne, ponieważ wiersz jest dłuższy, a to nieistotne informacje / schemat / szum. Stąd: to kwestia stylu, a dyskusję rozpocząłeś od pasywnej agresji „zagłosowałbyś za, gdyby pasował do mojego gustu” ..public static explicit double(MyType obj)
ipublic static explicit float(MyType obj)
. Nadal będziesz miećAmbiguousMatchException
. W takim przypadku możesz użyćreturnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float))
na przykład.