Я вызываю статический метод Parse для типа через отражение, потому что я не знаю тип объекта во время компиляции (но я знаю, что у него есть метод Parse , принимающий строку).
Однако я получаю исключение неоднозначного совпадения, предположительно потому, что существует много перегруженных методов Parse, каждый из которых принимает один объект (string, int, double и т. Д.).
Как я могу быть более конкретным при вызове моего метода, чтобы гарантировать, что я достигну правильного метода ( Parse (string s) ), и исключение не будет создано.
Мой код выглядит так:
Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });
c#
reflection
ambiguous-call
Бен Астон
источник
источник
new [] { typeof(string) }
есть другие проблемы, кроме поддержки кода. Буквально тут типаж. Плюс «сумасшедшие однострочные» слова неуместны, ваш предпочтительный стиль просто добавляет лишние буквы в эту самую строку. Я бы сказал, чтоnew Type[] {...}
это менее читабельно, потому что строка длиннее и это неактуальная информация / шаблон / шум. Следовательно: это вопрос стиля, и вы начали обсуждение с пассивно-агрессивного «проголосовали бы за, если бы это соответствовало моему вкусу» ..public static explicit double(MyType obj)
иpublic static explicit float(MyType obj)
. У вас по-прежнему будетAmbiguousMatchException
. В этом случае вы можете,returnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float))
например, использовать .