c# - 如何显式记录方法不会抛出异常

标签 c# exception xml-comments code-documentation

在 C# 中使用 XML 注释,我可以记录一个方法可能会抛出异常:

<exception cref="FooException">Thrown if foo is invalid.</exception>

但是,如果方法在其 XML 文档中没有 exception 标记,这可能意味着以下两种情况之一:

  1. 作者彻底测试了该方法,确保它永远不会抛出异常,并希望通过不添加 exception 标记来记录这一事实。
  2. 作者不关心记录异常,所以这个方法可能会抛出任何东西。

根据我的经验,通常是第二种情况。那么问题是:

我如何明确记录一个方法永远不会抛出异常?

到目前为止,我想到的最好方法是在方法的 summary 中简单地提及它,例如“This method does not throw exceptions”。但我想知道是否有更正式的方式来表达这一点,例如 C++ 中的 throw()(尽管这可能是一个不好的例子)。

最佳答案

将其添加到摘要中有利于文档和与其他开发人员的交流。

你说你想要更正式的方式,强硬。 据我对 C# 的了解(很少),Exception 有两个主要的子类,ApplicationExceptionSystemException。您通常不能保证不会抛出系统异常。然而,我们可以保证不会抛出任何 ApplicationException

1。有契约(Contract)

code contracts ,您可以使用 EnsuresOnThrow 后置条件:

    Contract.EnsuresOnThrow<ApplicationException>( false );

2。无契约(Contract)

将代码主体包裹在全局 try/catch 中,并在 catch block 中断言 False

在这两种情况下,静态分析器应该明白,当异常发生时,断言或后置条件永远不会为真:因此,当且仅当没有异常发生时,应用程序才会履行其契约(Contract)从你的函数中抛出。

关于c# - 如何显式记录方法不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22655523/

相关文章:

c# - 在 flowLayout 中的控件之间设置更多空间

c# - .NET 乘法优化

c# - Windows 手机 : Application Exits after handling Exception from DialogForm

Android Studio 2.1.2 渲染问题。 VectorDrawable_Delegate.nDraw

visual-studio-2015 - Visual Studio XML 摘要不起作用

c# - 在 cref 中使用时 "T:"是什么

c# - Visual Studio 2017 : <list> not showing correctly on hover (xml documentation)

c# - 如何在 C# 中获取 CPU 的逻辑核心数/线程数?

C# 标题图片

java - 如何重现 Runtime.exec() 的 java.io.IOException 异常?