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

Почему я могу анализировать недопустимые значения для 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
    }
}
4b9b3361

Ответ 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);
}