Применение не возможно. Проблема заключается в том, что определяемое пользователем преобразование должно быть включено в объявление структуры или класса, а преобразование должно быть в / из включающего типа. Таким образом,
public static explicit operator MyEnum(string value)
невозможно, потому что ни MyEnum
, ни string
не могут быть типом включения.
Соответствующий раздел спецификации ECMA334 C # - 17.9.4:
Оператор преобразования выполняет преобразование из типа источника, указанного типом параметра преобразования
оператор, к целевому типу, указанному типом возврата оператора преобразования. Класс или структура
разрешено объявлять преобразование из исходного типа S в целевой тип T, только если все из следующего верно
где S0 и T0 - типы, которые возникают в результате удаления трейлинга? модификаторы, если таковые имеются, от S и T:
S0 и T0 - это разные типы.
S0 или T0 - это класс или тип структуры, в которых происходит объявление оператора .
Ни S0, ни T0 не являются интерфейсами.
За исключением пользовательских преобразований, преобразования не существует из S в T или из T в S.
Однако вы можете создать метод расширения для класса строки.
public static class StringExtensions {
public static T ConvertToEnum<T>(this string value) {
Contract.Requires(typeof(T).IsEnum);
Contract.Requires(value != null);
Contract.Requires(Enum.IsDefined(typeof(T), value));
return (T)Enum.Parse(typeof(T), value);
}
}