Недавно я обнаружил, что любая строка, содержащая только числовые символы, может быть преобразована в enum в C #.Например, представьте, что существует перечисление, определенное следующим образом:
public enum TestEnum
{
One = 1,
Two = 2,
Three = 3
};
Я могу выполнить преобразование некоторой случайной числовой строки в TestEnum
.
TestEnum testEnum = (TestEnum)Enum.Parse(typeof(TestEnum), "4");
Console.WriteLine(testEnum);
Значение '4'конечно, не сопоставляется с одним из определенных TestEnum
значений, и результат будет просто 4
, однако ошибки не будет, поэтому это преобразование допустимо.
С другой стороны, если япопробуйте проверить, будет ли это значение, определенное в TestEnum
:
Console.WriteLine(Enum.IsDefined(typeof(TestEnum), "4"));
, получать на выходе False
.
Это кажется мне немного странным, учитывая, чтоследующее преобразование нечисловой строки, например,
(TestEnum)Enum.Parse(typeof(TestEnum), "Test")
, выдаст System.ArgumentException
.
Я запутался с таким поведением.Это было сделано намеренно или это просто совпадение?