2009-10-26 65 views
0

我想在下面的代碼的空catch塊中測試一些異常處理邏輯。如何拋出一個不會從Exception繼承的異常?

try 
{ 
    //Do Some stuff that throws a exception 
    //This is the code i need 
} 
catch (Exception) 
{ 
    //Handle things that inherits from Exception 
} 
catch 
{ 
    //Handle things that dont inherits from Exception 
    //Want to test this code 
} 
+0

一個非常重要的一點是,'犯規繼承Exception'是可能的,但只有在CLR1.0平臺,或與[WrapNonExceptionThrows](http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.runtimecompatibilityattribute.wrapnonexceptionthrows.aspx)關閉 - 這兩個都很少見。 – quetzalcoatl 2013-06-14 13:20:10

回答

13

從CLR 2.0開始,這不是您需要擔心的情​​況。 CLR現在將自動包含所有不從System.Exception派生的異常,並使用RuntimeWrappedExceptionDocumentation)類型的新異常。

這種包裝可以通過啓用應用程序兼容性的水平被禁用,但它肯定是不正常的或常見的情況

唯一缺少
+0

謝謝Jared解決了我的問題。 – Simon 2009-10-26 01:58:21

5

您無法編寫在C#中引發非異常的代碼。您需要在IL中編寫它(並使用ILASM編譯)或C++/CLI。

但是,說實話,我不會擔心這種情況。拋出非異常的能力不在框架中使用,我懷疑它用在許多第三方代碼中。我只會解決這個問題,如果你使用的是一個庫,你知道會拋出非異常。

+0

+1幫助信息 – Simon 2009-10-26 01:59:23