Estou invocando um método estático Parse em um tipo via reflexão porque não sei o tipo do objeto em tempo de compilação (eu sei, no entanto, ele tem um método Parse , pegando uma string).
No entanto, estou recebendo uma exceção de correspondência ambígua, presumivelmente porque há muitos métodos do Parse sobrecarregados , cada um tomando um único objeto (string, int, double etc.).
Como posso ser mais específico na invocação de meu método para garantir que alcancei o método correto ( Parse (string s) ) e a exceção não é lançada.
Meu código é parecido com este:
Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });
c#
reflection
ambiguous-call
Ben Aston
fonte
fonte
new [] { typeof(string) }
tem outros problemas além de manter o código. O tipo está literalmente bem ali. Além disso, 'linhas malucas' não são relevantes, seu estilo preferido apenas adiciona letras redundantes nesta mesma linha. Eu diria quenew Type[] {...}
é menos legível, porque a linha é mais longa e isso é informação / clichê / ruído irrelevante. Portanto: É uma questão de estilo e você iniciou a discussão com um passivo agressivo 'teria votado positivamente, se atendesse ao meu gosto' ..public static explicit double(MyType obj)
epublic static explicit float(MyType obj)
. Você ainda terá umAmbiguousMatchException
. Neste caso, você pode usar,returnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float))
por exemplo.