J'appelle une méthode statique Parse sur un type via la réflexion car je ne connais pas le type de l'objet au moment de la compilation (je sais, cependant, il a une méthode Parse , prenant une chaîne).
Cependant, j'obtiens une exception de correspondance ambiguë, probablement parce qu'il y a beaucoup de méthodes Parse surchargées prenant chacune un seul objet (chaîne, int, double etc.).
Comment puis-je être plus spécifique dans mon appel de méthode pour m'assurer que j'atteins la bonne méthode ( Parse (string s) ) et que l'exception n'est pas levée.
Mon code ressemble à ceci:
Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });
c#
reflection
ambiguous-call
Ben Aston
la source
la source
new [] { typeof(string) }
a d'autres problèmes que la gestion du code. Le type est littéralement là. De plus, les `` one-liners fous '' ne sont pas pertinents, votre style préféré ajoute simplement des lettres redondantes dans cette même ligne. Je dirais quenew Type[] {...}
c'est moins lisible, car la ligne est plus longue et ce sont des informations / passe-partout / bruit non pertinents. Par conséquent: C'est une question de style et vous avez commencé la discussion avec un agressif passif «aurait voté pour, si cela répondait à mon goût».public static explicit double(MyType obj)
etpublic static explicit float(MyType obj)
. Vous aurez toujours un fichierAmbiguousMatchException
. Dans ce cas, vous pouvez utiliserreturnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float))
par exemple.