У меня есть тривиальный обобщенный enum
метод синтаксического анализа:
public static T Parse<T>(string value) => (T)Parse(typeof(T), value, false);
и использование:
public IEnumerable<DocumentTypesEnum> FileTypeEnums =>
FileTypes.Split(',').Select(Extensions.StringEnumerator.Parse<DocumentTypesEnum>);
Выше компилируется нормально.
Добавление необязательного параметра в Parse<T>
:
public static T Parse<T>(string value, bool ignoreCase = false) =>
(T)Parse(typeof(T), value, ignoreCase);
Теперь компилятор недоволен!
Он работает просто отлично, предоставляя аргумент / тип явно (это то, что сообщение об ошибке говорит в любом случае :)):
public IEnumerable<DocumentTypesEnum> FileTypeEnums =>
FileTypes.Split(',').Select(f => Extensions.StringEnumerator.Parse<DocumentTypesEnum>(f));
Но мне любопытно, почему компилятор жалуется, просто добавив необязательный параметр в селектор func?
Примечание: Ближайшее обсуждение, которое я могу найти: Невозможно определить универсальный тип с необязательными параметрами , но это больше из именованных аргументов выдайте необязательные аргументы, как указано Джон Скит .