C# - 在课堂上抛出异常

时间:2011-11-20 09:19:50

标签: c# exception exception-handling

我正在上课。这是功能之一:

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"));

获得一个例外

我该怎么做? P.S:抱歉英语不好。

2 个答案:

答案 0 :(得分:1)

您滥用异常处理。在您的代码中,如果您获得(例如)NullReferenceException,您将捕获它,然后抛出ArgumentException

将您的方法重写为任何异常处理:

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

这样,您不会重置堆栈跟踪并吞下原始异常。

就在主叫行上获取异常而言 - 你将永远无法在没有抛出异常的行上获得异常。

答案 1 :(得分:0)

有几件事:

首先,在catch中返回null语句会得到一个无法访问的代码警告,因为throw将在返回之前执行。您只需删除return null语句。

其次,我不确定你在MessageBox行中获取异常是什么意思,但我认为你的意思是你想在那里捕获它。在try-catch中包含对MessageBox的调用。

try
{
    MessageBox.Show(manager.GetAttribute("not_existing_element"));
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}