只是为了我的澄清:
我能否在 .NET Framework 中抛出符合 CLS 和不符合 CLS 的异常?我正在使用 C# 3.0。
当我捕捉到异常时
catch(Exception ex)
{
}
- 它会只捕获符合 CLS 的异常吗?
- RuntimeWrappedException 类有什么用(我可以举个简单的例子吗?)。
最佳答案
- 是的,您可以在 .NET Framework 中抛出不符合 CLS 的异常,只要您使用允许它的语言,例如C++。
- 不,您不能在 C# 中抛出不符合 CLS 的异常。
- 不,它会捕获所有异常,因为任何不符合 CLS 的异常都将包装在
RuntimeWrappedException
中,它派生自Exception
。 您不会抛出
RuntimeWrappedException
,CLR 会抛出。 MSDN上有详细的描述,这里引用一下:某些语言(例如 C++)允许您抛出任何托管类型的异常。其他语言,例如 Microsoft C# 和 Visual Basic,要求每个抛出的异常都派生自 Exception 类。为了保持语言之间的兼容性,公共(public)语言运行时 (CLR) 将不是从 Exception 派生的对象包装在 RuntimeWrappedException 对象中。
如果您想区别对待 CLS 和非 CLS 异常,只需按正确的顺序捕获它们:
try {
// some code
catch(RuntimeWrappedException ex) {
// non-CLS exceptions
catch(Exception ex) {
// CLS exceptions
}
关于c# - CLR 是否会同时处理符合 CLS 和不符合 CLS 的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1531077/