在 C# 中使用 XML 注释,我可以记录一个方法可能会抛出异常:
<exception cref="FooException">Thrown if foo is invalid.</exception>
但是,如果方法在其 XML 文档中没有 exception
标记,这可能意味着以下两种情况之一:
- 作者彻底测试了该方法,确保它永远不会抛出异常,并希望通过不添加
exception
标记来记录这一事实。 - 作者不关心记录异常,所以这个方法可能会抛出任何东西。
根据我的经验,通常是第二种情况。那么问题是:
我如何明确记录一个方法永远不会抛出异常?
到目前为止,我想到的最好方法是在方法的 summary
中简单地提及它,例如“This method does not throw exceptions”。但我想知道是否有更正式的方式来表达这一点,例如 C++ 中的 throw()
(尽管这可能是一个不好的例子)。
最佳答案
将其添加到摘要中有利于文档和与其他开发人员的交流。
你说你想要更正式的方式,强硬。
据我对 C# 的了解(很少),Exception
有两个主要的子类,ApplicationException
和 SystemException
。您通常不能保证不会抛出系统异常。然而,我们可以保证不会抛出任何 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/