Чтобы дать немного другой ответ ... хотя значения являются безопасными с точки зрения типов с точки зрения приведения, они все равно не проверяются после того, как они были отлиты - т.е.
enum Foo { A = 1, B = 2, C = 3 }
static void Main()
{
Foo foo = (Foo)500; // works fine
Console.WriteLine(foo); // also fine - shows 500
}
По этой причине вы должны позаботиться о проверке значений - например, с default
в switch
, который выдает исключение.
Вы также можете проверить (для не [Flags]
значений):
bool isValid = Enum.IsDefined(typeof(Foo), foo);