我有一些引發異常的函數。我希望捕獲它們的代碼塊也會根據拋出的異常拋出異常,但會拋出更多參數,如ID和Note。我怎樣才能做到這一點?存在異常的繼承異常
如果任何人都可以給我的方向,它會很好!
感謝(抱歉,我的英語...)
示例我想要的東西(我知道是不是有效的代碼...)
catch (Exception e)
{
LogException l=e;
l.Note = "note...";
l.ID = 12;
throw l;
}
我有一些引發異常的函數。我希望捕獲它們的代碼塊也會根據拋出的異常拋出異常,但會拋出更多參數,如ID和Note。我怎樣才能做到這一點?存在異常的繼承異常
如果任何人都可以給我的方向,它會很好!
感謝(抱歉,我的英語...)
示例我想要的東西(我知道是不是有效的代碼...)
catch (Exception e)
{
LogException l=e;
l.Note = "note...";
l.ID = 12;
throw l;
}
試試這個。
try
{
//....kaboom
}
catch (Exception ex)
{
var newEX= new Exception("custom message", ex);
newEX.Data.Add("any key", "any obj");
throw newEX;
}
這是更好的答案,除了你應該創建自己的異常類型,而不是拋出異常。你可能想編寫自己的頂級處理程序,它遞歸地遍歷所有內部異常並編譯所有要記錄的消息和堆棧跟蹤的相當清單。你不應該把它叫做LogException,異常名稱應該告訴你關於這個問題的一些事情,而不是你在捕獲它時想要做什麼。 –
您需要定義自己的異常(繼承自Exception)具有這些額外屬性。請參閱這裏瞭解自定義異常應採取的基本格式 https://msdn.microsoft.com/en-us/library/ms229064(v=vs.100).aspx (請注意,您應該使異常可序列化。)您只需添加您的額外屬性。
一旦你創建了異常類(在你的情況下是LogException),那麼你的上面的代碼將工作。
構建一個包含所有參數的「State」類。然後將該類傳遞給異常處理程序。變量'e'可以包含一個類。 – jdweng
爲什麼不在第一個實例中拋出'LogException'? –
@DarrenYoung是不是我的代碼,總是拋出異常,因爲我沒有完全控制異常類型 –