Использование перечисления и оператора switch c # - PullRequest
1 голос
/ 08 января 2012

Я использую enum в качестве опций для оператора switch, и он работает.Проблема в том, что если пользователь вводит недопустимую опцию, программа вылетает.Что я должен добавить, чтобы использовалось значение по умолчанию?

мой класс enum

    public enum Options : byte
    {
        Display = 1,
        Add,
        Toggle,
        Max,
        Mean,
        Medium,
        Exit
    }

в главном операторе my switch

    string volString = Console.ReadLine();
    Options options = (Options)Enum.Parse(typeof(Options), volString);
    // this is the line that is giving me the runtime error. Since other options are not found

в перечислении программа вылетает.

                switch (options)
                {
                    case Options.Display: //dispaly regular time

                    case Options.Toggle://toggle 

                    default:
                        Console.WriteLine("entry blah blah");
                        break;

Ответы [ 4 ]

5 голосов
/ 08 января 2012

Вместо Enum.Parse используйте Enum.TryParse ... это вернет логическое значение, чтобы сказать, может ли текст быть преобразован в ваше перечисление.Если это правда, запустите ваш переключатель, в противном случае сообщите пользователю, что он ввел неверную строку.

4 голосов
/ 08 января 2012

Используйте Enum.TryParse вместо:

Options options;

if(!Enum.TryParse(volString, out options)) {
    // It wasn't valid input.
}
2 голосов
/ 08 января 2012

Как насчет:

Options value;
if(!Enum.TryParse(volString, out value)) // note implicit <Options>
    value = Options.SomeDefaultValue;
0 голосов
/ 08 января 2012

Посмотрите на Enum.TryParse (...), вы можете использовать это для проверки на недопустимые строки.

...