Ich rufe eine statische Methode zum Parsen eines Typs über Reflektion auf, da ich den Typ des Objekts zur Kompilierungszeit nicht kenne (ich weiß jedoch, dass es eine Parse- Methode gibt, die eine Zeichenfolge verwendet).
Ich erhalte jedoch eine mehrdeutige Übereinstimmungsausnahme, vermutlich weil es viele überladene Parse- Methoden gibt, die jeweils ein einzelnes Objekt (Zeichenfolge, int, double usw.) verwenden.
Wie kann ich meinen Methodenaufruf genauer festlegen, um sicherzustellen, dass ich die richtige Methode ( Parse (Zeichenfolge) ) erreiche und die Ausnahme nicht ausgelöst wird?
Mein Code sieht folgendermaßen aus:
Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });
c#
reflection
ambiguous-call
Ben Aston
quelle
quelle
new [] { typeof(string) }
hat andere Probleme als das Verwalten von Code. Der Typ ist buchstäblich genau dort. Außerdem sind 'verrückte Einzeiler' nicht relevant. Ihr bevorzugter Stil fügt dieser Zeile nur redundante Buchstaben hinzu. Ich würde behaupten, dass diesnew Type[] {...}
weniger lesbar ist, da die Leitung länger ist und das irrelevante Informationen / Boilerplate / Rauschen sind. Daraus folgt: Es ist eine Frage des Stils und die Diskussion mit einem passiven aggressiven gestartet ‚upvoted hätte, wenn es nach meinem Geschmack bieten würde‘ ..public static explicit double(MyType obj)
undpublic static explicit float(MyType obj)
. Sie werden noch eine habenAmbiguousMatchException
. In diesem Fall könnten SiereturnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float))
zum Beispiel verwenden.