【问题标题】:Noexcept equivilent in C#C# 中的 Noexcept 等价物
【发布时间】:2011-11-01 08:19:25
【问题描述】:

我想问在 C# 中是否有 C++ 的“noexcept”属性用于不产生任何异常的方法。类似的东西:

    public int SomeMethod() noexcept
    {
     throw new ArgumentNullException (); //Compile error: Method with 'noexcept' 
attribute can't generate exceptions.
    }

当我想在我的代码中调用这个方法时,我不需要考虑这个方法的 try/catch 块。

【问题讨论】:

  • 我不相信有这样的事情。您将不得不在您的SomeMethod 中尝试 catch
  • 我认为这个问题有一个错字,你的意思是“noexcept”吗?
  • 语言本身没有内置任何东西,您需要使用静态分析工具来强制执行这种约定..
  • @MattDavey 这可能是 Roslyn 的用例吗? blogs.msdn.com/b/ericlippert/archive/2011/10/19/…
  • C# 语言中永远不会有异常规范,Anders 会确保这一点。它们在新的 C++ 语言规范中已被弃用。

标签: c# .net exception language-features


【解决方案1】:

据我所知,C# 中没有类似的东西(尽管我不是 100% 的)。关于它的用途;在编写干净的代码时,您应该只在您期望它们发生的地方处理异常。这使您的程序的流程和控制更易于管理。

如果您不知道在某个方法期间可能发生的异常,或者发生了您没有预料到的异常,那么您需要确定该异常是否被认为是严重的(因为它应该 导致应用程序失败);或者是否应该在代码中专门处理。

【讨论】:

  • 我希望更多的人明白“如果发生了你没想到的事情,那么崩溃可能是最好的选择”。如果您想避免这种情况,只需确保您的所有“空白”try ... catch 语句只出现在完全隔离的代码中,与应用程序的其余部分没有共享状态。否则,您将面临非常奇怪的不一致错误。我已经调试了很多这样的应用程序,这是一个非常痛苦的过程。
猜你喜欢
  • 2011-04-02
  • 2021-10-15
  • 2013-10-20
  • 2011-04-10
  • 2021-12-02
  • 2010-09-14
  • 2016-12-24
  • 2013-02-10
相关资源
最近更新 更多