在C#中抛出异常?

这个问题在这里已经有了答案:

  • 捕获和重新抛出.NET异常的最佳实践11个答案

  • 你应该总是使用下面的语法重新抛出一个异常,否则你会踩踏堆栈跟踪:

    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

    上一篇: throw an exception in C#?

    下一篇: Is this the proper use of a mutex?