如何抛出不从Exception继承的异常?

时间:2009-10-26 01:44:20

标签: .net exception exception-handling

我想在下面代码的空catch块中测试一些异常处理逻辑。

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
}

2 个答案:

答案 0 :(得分:13)

从CLR 2.0开始,这不是您需要担心的情​​况。现在,CLR将自动包装所有不是从System.Exception派生的异常,并使用类型为RuntimeWrappedException的新异常(Documentation)。

可以通过启用一定程度的应用程序兼容性来禁用此包装,但这肯定不是正常或常见的情况

答案 1 :(得分:5)

您无法编写在C#中抛出非异常的代码。您需要在IL中编写它(并使用ILASM编译)或C ++ / CLI。

但是,说实话,我不担心这种情况。在框架中没有使用抛出非异常的能力,我怀疑它是否在许多第三方代码中使用。我只会解决这个问题,如果您使用的是知道的库,则会抛出非例外情况。