使用代码约定指定返回值可以为null

Law*_*eld 9 .net c# code-contracts

有没有明确地指定一个返回值的方法可以使用代码契约为空?

我担心的是,没有a的方法Contract.Ensures(Contract.Result<object>() != null)将来可能被错误地"修复"以包括后置条件,即使最初的意图可能是允许空结果.

Mat*_*dge 9

如果有任何其他后置条件,那么这些将表明这null是一个有效的返回值.例如,如果方法应返回正值,但null在发生错误时使用:

Contract.Ensures(Contract.Result<int?>() == null || 0 <= Contract.Result<int?>());
Run Code Online (Sandbox Code Playgroud)

但是,如果您担心回归,最好的解决方案可能是为预期的null返回值添加单元测试.