C # switch оператор, попробуйте и поймать помощь требуется - PullRequest
1 голос
/ 03 апреля 2011

Я все еще в тумане от обучения программированию, на самом деле очень потерян в этом тумане.Может кто-нибудь помочь мне, пожалуйста, чтобы реализовать это правильно, ниже приведен мой код, в основном у меня есть метод, который принимает значение, проверяет это значение в переключателе.: S

    public string InTheBox(int x)
    {
        try
        {
            //switch statment to lookup log ID
            switch (x)
            {
                case 0:
                    return "Outter";
                case 1:
                    return "Inner";
                case 2:
                    return "Border";
                default:
                    throw new ArgumentOutOfRangeException("Unknown value");
            }
        }
        catch (ArgumentOutOfRangeException)
        {
            throw new ArgumentOutOfRangeException("Unknown value");
        }
    }

Если кто-нибудь может объяснить мне самый простой способ отловить эти исключения.Спасибо!

Ответы [ 6 ]

10 голосов
/ 03 апреля 2011

Почему у вас вообще есть блок try catch?Вы можете просто иметь

public string InTheBox(int x)
{
    //switch statment to lookup log ID
    switch (x)
    {
        case 0:
            return "Outter";
        case 1:
            return "Inner";
        case 2:
            return "Border";
        default:
            throw new ArgumentOutOfRangeException("Unknown value");
    }
}
4 голосов
/ 03 апреля 2011

Здесь вам не нужно try { } catch { } - вы ничего не делаете для разрешения ситуации в этом методе, поэтому вы просто хотите выбросить исключение (как вы делаете) и оставить его методу, который вызывает один, чтобы иметь дело с исключением.

2 голосов
/ 03 апреля 2011

В этом методе блок try-catch вам не нужен - он только повторно генерирует исключение, поэтому ничего не меняется.

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

Итак, ваш метод должен выглядеть так

public string InTheBox(int x)
{
    //switch statment to lookup log ID
    switch (x)
    {
            case 0:
                return "Outter";
            case 1:
                return "Inner";
            case 2:
                return "Border";
            default:
                throw new ArgumentOutOfRangeException("Unknown value");
    }

}

Однако вы называете это так:

 try
{
   //some code
   InTheBox(someValue);
   //perhaps some other code
}
catch(ArgumentOutOfRangeException ex)
{
   //Action you take when exception occurs, perhaps notifying the user.
}
2 голосов
/ 03 апреля 2011

Не лови, если не собираешься с этим что-то делать:

public string InTheBox(int x)
{
    //switch statment to lookup log ID
    switch (x)
    {
            case 0:
                return "Outter";
            case 1:
                return "Inner";
            case 2:
                return "Border";
            default:
                throw new ArgumentOutOfRangeException("Unknown value");
    }

}
0 голосов
/ 03 апреля 2011

Привет .. Единственное, чего вам не хватает, так это того, что ваш улов должен иметь переменную, чтобы назначить исключение ...

заменить:

catch (ArgumentOutOfRangeException)
        {
            throw new ArgumentOutOfRangeException("Unknown value");
        }

с

catch (ArgumentOutOfRangeException ex)
        {
            throw new ArgumentOutOfRangeException("Unknown value");
        }

Конечно, ситуация, которую вы создали catch/throw ... new, является избыточной, но я предполагаю, что вы извлекаете ее из более крупного сценария, чтобы задать свой вопрос.

Я бы порекомендовал сделать что-то со значением вне диапазона, например:

default:
            throw new ArgumentOutOfRangeException("Value out of range " + x.toString());

Это может помочь вам в устранении неполадок, вызывающих неожиданное значение.

Надеюсь, это направит вас в правильном направлении.

Приветствия

CEC

0 голосов
/ 03 апреля 2011

Это зависит от того, что вы хотите, чтобы этот метод делал. Если должно быть сгенерировано исключение, если аргумент неверен, просто удалите try / catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...