c# - CLR 是否会同时处理符合 CLS 和不符合 CLS 的异常?

标签 c# asp.net .net exception

只是为了我的澄清:

我能否在 .NET Framework 中抛出符合 CLS 和不符合 CLS 的异常?我正在使用 C# 3.0。

当我捕捉到异常时

catch(Exception ex)
{

}
  • 它会只捕获符合 CLS 的异常吗?
  • RuntimeWrappedException 类有什么用(我可以举个简单的例子吗?)。

最佳答案

  1. 是的,您可以在 .NET Framework 中抛出不符合 CLS 的异常,只要您使用允许它的语言,例如C++。
  2. 不,您不能在 C# 中抛出不符合 CLS 的异常。
  3. 不,它会捕获所有异常,因为任何不符合 CLS 的异常都将包装在 RuntimeWrappedException 中,它派生自 Exception
  4. 您不会抛出 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/

相关文章:

c# - 获取 XML 上的嵌套元素(使用 Lambda)并设置为 List<Object>

c# - 属性的自定义属性 - 获取属性属性的类型和值

c# - 难以使用 JQuery 设置自定义 DDL 的值

c# - ASP.NET MVC 4 Controller 失败找不到与名为 'account' 的 Controller 匹配的类型

c# - 每秒执行 x 间隔时如何避免重叠?

c# - 从汇编中获取 MSIL?

c# - Entity Framework 生成SQL问题(同一个表上的多个连接)

c# - 如何收集用户对软件的意见

asp.net - JQuery-Mobile和ASP.Net-AJAX还是回发?

c# - 在另一个表单上更改文本框的文本