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:抱歉英语不好。
答案 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);
}