C # - Бросать исключение в классе - PullRequest
1 голос
/ 20 ноября 2011

Я пишу класс.Вот одна из функций:

public string GetAttribute(string attrName)
{

    try
    {
        return _config.AppSettings.Settings[attrName].Value;
    } catch(Exception e)
    {
        throw new ArgumentException("Element not exists", attrName);
        return null;
    }
}

Затем я использую ее в основной форме MessageBox.Show(manager.GetAttribute("not_existing_element"));

Visual Studio выдает исключение в строке: throw new ArgumentException("Element not exists", attrName);

но я хочу получить Исключение в строке MessageBox.Show(manager.GetAttribute("not_existing_element"));

Как я могу это сделать?PS: извините за плохой английский.

Ответы [ 2 ]

1 голос
/ 20 ноября 2011

Вы неправильно используете обработку исключений.В вашем коде, если вы получите (например) NullReferenceException, вы его поймаете, а затем выбросите ArgumentException.

Перепишите свой метод, чтобы исключить любую обработку исключений:

public string GetAttribute(string attrName)
{
    return _config.AppSettings.Settings[attrName].Value;
}

Таким образом, вы не сбрасываете трассировку стека и не глотаете исходное исключение.

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

0 голосов
/ 20 ноября 2011

Пара вещей:

Во-первых, вы получите предупреждение о недоступном коде для оператора return null в вашем catch, потому что throw будет выполняться до возврата. Вы можете просто удалить инструкцию возврата нуля.

Во-вторых, я не уверен, что вы имеете в виду, когда получаете исключение в строке MessageBox, но я думаю, что вы имеете в виду, что хотите его там поймать. Оберните вызов MessageBox в try-catch.

try
{
    MessageBox.Show(manager.GetAttribute("not_existing_element"));
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...