在类中抛出异常
本文关键字:抛出异常 | 更新日期: 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);
}