Почему я могу анализировать недопустимые значения для Enum в .NET?
Почему это возможно? Это ошибка?
using System;
public class InvalidEnumParse
{
public enum Number
{
One,
Two,
Three,
Four
}
public static void Main()
{
string input = "761";
Number number = (Number)Enum.Parse(typeof(Number), input);
Console.WriteLine(number); //outputs 761
}
}
Ответы
Ответ 1
Вот как работает enums в .NET. Перечисление не является ограничивающим набором значений, это действительно просто набор имен для чисел (и тип для сбора этих имен вместе) - и я согласен, что иногда бывает боль.
Если вы хотите проверить, действительно ли значение определено в перечислении, вы можете использовать Enum.IsDefined
после его разбора. Если вы хотите сделать это более безопасным способом, вы можете посмотреть мой проект
Ответ 2
Если у вас есть атрибут enum
с [Flags]
, вы можете иметь любую комбинацию значений. Например:
[Flags]
enum Test
{
A = 1,
B = 2,
C = 4,
D = 8
}
Вы могли бы сделать это:
Test sample = (Test)7;
foreach (Test test in Enum.GetValues(typeof(Test)))
{
Console.WriteLine("Sample does{0} contains {1}",
(sample & test) == test ? "": " not", test);
}