在C#中抛出异常?
这个问题在这里已经有了答案:
你应该总是使用下面的语法重新抛出一个异常,否则你会踩踏堆栈跟踪:
throw;
如果您打印由“throw ex”产生的轨迹,您会看到它以该语句结束,而不是真正的异常源。
基本上,使用“throw ex”应该被视为刑事犯罪。
我的偏好是使用
try
{
}
catch (Exception ex)
{
...
throw new Exception ("Put more context here", ex)
}
这保留了原始错误,但允许您放置更多上下文,如对象ID,连接字符串等。 通常,我的例外报告工具将有5个链式例外报告,每个都报告更多的细节。
如果抛出异常,并出一个变量(第二个例子)的堆栈跟踪将包括抛出异常的原始方法。
在第一个例子中,StackTrace将被改变以反映当前的方法。
例:
static string ReadAFile(string fileName) {
string result = string.Empty;
try {
result = File.ReadAllLines(fileName);
} catch(Exception ex) {
throw ex; // This will show ReadAFile in the StackTrace
throw; // This will show ReadAllLines in the StackTrace
}
链接地址: http://www.djcxy.com/p/51213.html