gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:17:20 24 4
gpt4 key购买 nike

只是为了我的澄清:

我能否在 .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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com