Enum.TryParse возвращает true для любых числовых значений
Я использую поведение, которого я не ожидал при использовании Enum.TryParse.
Если у меня есть перечисление:
public enum MyEnum
{
ValueA,
ValueB,
ValueC
}
И затем я передаю числовое значение (как строку) в Enum.TryParse, например:
MyEnum outputEnum;
bool result = Enum.TryParse("1234", out outputEnum);
Несмотря на то, что строка "1234" не является возможным значением, результат вернется как истинный, а мой outputEnum будет иметь значение 1234.
Есть ли способ избежать такого поведения? Я пытаюсь написать функцию, которая будет обрабатывать произвольный ввод строки в качестве переименования, и это заставило вас немного заглянуть в мое обнаружение с ошибками.
Ответы
Ответ 1
Это поведение по дизайну.
В документации говорится:
. Если значение представляет собой строковое представление целого числа, которое не представляет собой базовое значение перечисления TEnum, метод возвращает элемент перечисления, базовое значение которого преобразуется в целочисленный тип. Если это поведение нежелательно, вызовите метод IsDefined, чтобы убедиться, что конкретное строковое представление целого является фактически членом TEnum.
Вызовите Enum.IsDefined
, чтобы подтвердить, что фактически вы проанализировали значение в этом enum
.
Если вы имеете дело с [Flags]
enums (битмаски), это будет усложняться.