Estoy invocando un método estático Parse en un tipo a través de la reflexión porque no sé el tipo de objeto en tiempo de compilación (lo sé, sin embargo, tiene un método Parse , tomando una cadena).
Sin embargo, obtengo una excepción de coincidencia ambigua, presumiblemente porque hay muchos métodos Parse sobrecargados , cada uno de los cuales toma un solo objeto (cadena, int, doble, etc.).
¿Cómo puedo ser más específico en la invocación de mi método para asegurarme de que llego al método correcto ( Parse (string s) ) y no se lanza la excepción?
Mi código se ve así:
Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });
c#
reflection
ambiguous-call
Ben Aston
fuente
fuente
new [] { typeof(string) }
tiene otros problemas además de mantener el código. El tipo está literalmente ahí. Además, las 'frases locas' no son relevantes, su estilo preferido solo agrega letras redundantes en esta misma línea. Yo diría quenew Type[] {...}
es menos legible, porque la línea es más larga y eso es información irrelevante / repetitivo / ruido. Por lo tanto: es una cuestión de estilo y comenzaste la discusión con un pasivo agresivo 'habría votado a favor, si fuera a mi gusto' ..public static explicit double(MyType obj)
ypublic static explicit float(MyType obj)
. Todavía tendrá unAmbiguousMatchException
. En este caso, podría utilizar,returnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float))
por ejemplo.