У меня есть это перечисление:Как преобразовать char в объект Enum, основанный на char?
enum OptionalityEnum { call = 'C', put = 'P', undefined = 'N' }
есть простой способ превратить символ в перечислимом тип? Это работает:
char chOpt = 'C';
OptionalityEnum opt = (OptionalityEnum)chOpt; //opt = OptionalityEnum.call
Но если мой символ является значением, которого нет в перечислении, это приводит к странным результатам.
char chOpt = 'X';
OptionalityEnum opt = (OptionalityEnum)chOpt; //opt = 88
Я знаю некоторые функции Enum, но я не могу найти тот, который делает это преобразование для меня.
Enum.GetNames(typeof(OptionalityEnum)) = { call, na, put }
Enum.GetValues(typeof(OptionalityEnum)) = { call, na, put }
Enum.TryParse<OptionalityEnum>("C", out optionality) = false
Enum.TryParse<OptionalityEnum>("call", out optionality) = true
//... but that's not what I want.
Enum.IsDefined(typeof(OptionalityEnum), "call") = true
//... but that's not what I want.
Должен ли я написать собственный конвертер? Что-то вроде этого?
частного статический OptionalityEnum Convert (голец ч) { результата OptionalityEnum = (OptionalityEnum) ч; if (Enum.IsDefined (typeof (OptionalityEnum), результат)) результат возврата; else return OptionalityEnum.undefined; }
private static bool TryConvert(char ch, out OptionalityEnum opt)
{
opt = (OptionalityEnum)ch;
return Enum.IsDefined(typeof(OptionalityEnum), opt);
}
Это работает, но это, кажется, неаккуратно. Я был бы удивлен, если что-то вроде этого еще не существует.
EDIT: Первоначально я использовал плохой пример для своей функции . Я изменил его на функцию TryConvert
.
Хорошо, теперь я вижу, что я использовал плохой пример для своей функции преобразования. См. Мою функцию TryConvert. Это на самом деле короче, так что, возможно, это не так уж плохо. Я все еще удивляюсь, если ничего подобного уже не существует. – user2023861
@ user2023861: Смотрите мое редактирование. Я действительно не думаю, что есть что-то подобное. –