Путаница с анализом Enum

Я конвертирую числовое значение строкового типа в соответствующее Enum. Пока я тестировал свой код, я обнаружил интересное поведение, которое меня сбило с толку.

Используя приведенный ниже пример кода, может ли кто-нибудь пролить свет на то, почему не генерируется исключение, если / когда переменная «s» имеет значение, не совпадающее с одним из значений Enum? Кроме того, как можно установить для sEnum var значение, которое не существует в определении перечисления Stooge?

class Program
{
    enum Stooge
    {
        Unspecified,
        Moe,
        Larry,
        Curly,
        Shemp
    }

    static void Main(string[] args)
    {
        while (true)
        {
            Console.WriteLine("Enter a number...");

            string s = Console.ReadLine();
            Stooge sEnum = (Stooge)(int.Parse(s)); //Why doesn't this line throw if s != 0, 1, 2, 3, or 4?

            Console.WriteLine("\r\nYou entered: {0}\r\nEnum String Value: {1}\r\nEnum Int Value: {2}\r\n", s, sEnum.ToString(), (int)sEnum);
        }
    }
}
7
задан dtb 3 February 2011 в 22:38
поделиться