如何显式地记录方法不会抛出异常
本文关键字:抛出异常 方法 记录 何显式 | 更新日期: 2023-09-27 17:53:55
使用c#中的XML注释,我可以记录一个方法可能抛出异常:
<exception cref="FooException">Thrown if foo is invalid.</exception>
但是,如果方法的XML文档中没有exception
标记,这可能意味着以下两种情况之一:
- 作者彻底测试了该方法,确保它不会抛出异常,并希望通过不添加
exception
标记来记录这一事实。 - 作者不关心记录异常,所以这个方法可能会抛出任何东西。
根据我的经验,通常是第二种情况。那么问题是:
我如何显式地记录一个方法永远不会抛出异常?
到目前为止,我想到的最好的方法是在方法的summary
中简单地提到它,如"此方法不抛出异常"。但是我想知道是否有一种更正式的方式来表达这一点,就像c++中的throw()
(尽管这可能是一个不好的例子)。
将其添加到摘要中有利于文档和与其他开发人员的沟通。
你说你想要一种更正式的方式,tough。从我对c#的了解(很少)来看,Exception
有两个主要的子类,ApplicationException
和SystemException
。通常不能保证不会抛出系统异常。但是,我们可以保证不会抛出ApplicationException
。
1。与合同
对于代码契约,您可以使用EnsuresOnThrow
后置条件:
Contract.EnsuresOnThrow<ApplicationException>( false );
2。没有合同
将代码体包装在全局try/catch
中,并在catch块中断言False
。
在这两种情况下,静态分析器应该明白,当异常发生时,断言或后验条件永远不可能为真:因此,当且仅当从函数中没有抛出异常时,应用程序才会履行其契约。