Подтвердить что ты не робот

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.

Есть ли способ избежать такого поведения? Я пытаюсь написать функцию, которая будет обрабатывать произвольный ввод строки в качестве переименования, и это заставило вас немного заглянуть в мое обнаружение с ошибками.

4b9b3361

Ответ 1

Это поведение по дизайну.

В документации говорится:

. Если значение представляет собой строковое представление целого числа, которое не представляет собой базовое значение перечисления TEnum, метод возвращает элемент перечисления, базовое значение которого преобразуется в целочисленный тип. Если это поведение нежелательно, вызовите метод IsDefined, чтобы убедиться, что конкретное строковое представление целого является фактически членом TEnum.

Вызовите Enum.IsDefined, чтобы подтвердить, что фактически вы проанализировали значение в этом enum.

Если вы имеете дело с [Flags] enums (битмаски), это будет усложняться.