在类中抛出异常

本文关键字:抛出异常 | 更新日期: 2023-09-27 18:15:10

我在写课。下面是其中一个函数:

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在line: throw new ArgumentException("Element not exists", attrName);

抛出异常

但是,我想在MessageBox.Show(manager.GetAttribute("not_existing_element"));行得到一个异常

我该怎么做呢?附注:对不起,我的英语不好。

在类中抛出异常

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

重写你的方法使其不包含任何异常处理:

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

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

关于在调用行获得异常——你将永远无法在没有抛出异常的行获得异常

以下几点:

首先,对于catch中的return null语句,您将得到一个不可达的代码警告,因为throw将在return之前执行。您可以简单地删除返回null语句。

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

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