如何显式地记录方法不会抛出异常

本文关键字:抛出异常 方法 记录 何显式 | 更新日期: 2023-09-27 17:53:55

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

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

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

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

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

我如何显式地记录一个方法永远不会抛出异常?

到目前为止,我想到的最好的方法是在方法的summary中简单地提到它,如"此方法不抛出异常"。但是我想知道是否有一种更正式的方式来表达这一点,就像c++中的throw()(尽管这可能是一个不好的例子)。

如何显式地记录方法不会抛出异常

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

你说你想要一种更正式的方式,tough。从我对c#的了解(很少)来看,Exception有两个主要的子类,ApplicationExceptionSystemException。通常不能保证不会抛出系统异常。但是,我们可以保证不会抛出ApplicationException

1。与合同

对于代码契约,您可以使用EnsuresOnThrow后置条件:

    Contract.EnsuresOnThrow<ApplicationException>( false );

2。没有合同

将代码体包装在全局try/catch中,并在catch块中断言False

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