簡體   English   中英

拋出異常

[英]Exception throwing

在C#中,下面的代碼是否會在調用堆棧中引入包含其他信息的e

...
catch(Exception e)
{
  e.Data.Add("Additional information","blah blah");
  throw;
}

是的,它會的。 很多開發人員都沒有意識到以下代碼會在調用堆棧中從該點拋出一個新的異常,而不是之前在catch之前調用堆棧的調用。

...
catch(Exception e)
{
  e.Data.Add("Additional information","blah blah");
  throw e;
}

我很難學到這一點!

        var answer = "No";
        try
        {
            try
            {
                throw new Exception();
            }
            catch (Exception e)
            {
                e.Data.Add("mykey", "myvalue");
                throw;
            }
        }
        catch (Exception e)
        {
            if((string)e.Data["mykey"] == "myvalue")
                answer = "Yes";
        }

        Console.WriteLine(answer);
        Console.ReadLine();     

當你運行代碼時,你會發現答案是肯定的:-)

例外不是不可變的,並且能夠向它們添加信息是其中一個原因。

所以,是的,數據將被添加到冒泡的異常信息中。

你可以這樣做但是由於FxCop,我總是在拋出異常時創建自定義異常。 這使調用者能夠輕松捕獲和理解不同類型的錯誤。 如果您需要包含后續異常,則可以使用Exception的InnerException,或者只是為新Exception添加成員變量。

這告訴您如何讓自己成功。 http://blog.gurock.com/articles/creating-custom-exceptions-in-dotnet/

這是人們喜歡跳過的那些編程之一,因為它只是讓應用程序正常運行的額外工作。

這是我個人編程Zen的頁面:

你的計划是你的房子。 讓它變得盡可能好,這樣生活起來既輕松又有趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM