c#代码契约——避免检查参数是否为空引用

本文关键字:是否 引用 参数 代码 契约 检查 | 更新日期: 2023-09-27 18:04:19

我今天读了关于c# 4.0代码契约的文章。验证方法的参数是否为空的常见做法如下:

Contract.Requires(p != null);

然而,对我来说,我必须对代码中每个接口方法的每个参数都这样做似乎很不合理。在绝大多数情况下,参数不应该为空。我希望有某种机制允许定义一些"允许"为空的特定参数(类似于Java中的"@Nullable"注释),并且契约框架将自动确保其余参数不为空。

除了在这个"样板检查"上节省很多时间(以及许多"合约类",因为很多时候除了非空参数之外根本没有任何需要验证的条件),它还将使合约代码更干净,更"面向逻辑"。

我的问题是,有什么方法可以做到这一点,如果没有,哪里没有一个,或者可能为什么我的方法在这里是错误的?

c#代码契约——避免检查参数是否为空引用

我不同意,当你需要检查某些东西是否还没有初始化,或者没有找到数据时,null是非常有用的,有时你想把null传递给一个方法,它很好,代码契约对于服务许多类的常见方法和api定义都很好。如果你在分层架构中编写,你只需要保护层之间的交互,并且在每一层中都是零安全的。

你的域名是空的,这是好的