CLR会处理CLS-Complaint和非CLS投诉异常吗?

use*_*805 8 c# asp.net exception-handling

仅供我澄清:

我可以在.NET Framework中抛出CLS-Complaint和非CLS投诉异常吗?.我正在使用C#3.0.

当我抓住异常

catch(Exception ex)
{

}
Run Code Online (Sandbox Code Playgroud)
  • 它只会捕获CLS-Complaint异常吗?
  • RuntimeWrappedException类有什么用(我可以举一个简单的例子吗?).

Chr*_*ter 13

  1. 是的,您可以在.NET Framework中抛出非CLS兼容的异常,只要您使用允许它的语言,例如C++.
  2. 不,您不能在C#中抛出非CLS兼容的异常.
  3. 不,它将捕获所有异常,因为任何非CLS兼容的异常将包装在a中RuntimeWrappedException,派生自Exception.
  4. 你不扔RuntimeWrappedException,CLR.MSDN有一个详细的描述,我在这里引用:

    某些语言(如C++)允许您抛出任何托管类型的异常.其他语言(如Microsoft C#和Visual Basic)要求从Exception类派生每个抛出的异常.为了保持语言之间的兼容性,公共语言运行库(CLR)在RuntimeWrappedException对象中包装不从Exception派生的对象.

如果要以不同方式处理CLS和非CLS异常,只需按正确顺序捕获它们:

try {
    // some code
catch(RuntimeWrappedException ex) {
    // non-CLS exceptions
catch(Exception ex) {
    // CLS exceptions
}
Run Code Online (Sandbox Code Playgroud)