C# code contracts - avoiding checking parameters for null references
我今天读到了C 4.0代码合同。似乎验证方法的参数不是空的常见做法如下:
1 | Contract.Requires(p != null); |
然而,对于我来说,对于代码中每个接口方法的每个参数,我都必须这样做,这似乎是不合理的。在大多数情况下,参数不应为空。我希望会有某种机制,允许某些特定的参数"允许"为空(类似于Java中的"@ nulLable"注释),并且契约框架将自动确保其余的不是空的。
除了在这个"样板文件检查"(以及许多"合同类",因为很多时候除了非空参数没有任何要验证的条件),它还将使合同代码更干净,更"面向逻辑"。
我的问题是,是否有任何方法可以做到这一点,如果没有,哪里没有,或者可能是为什么我的方法在这里是错误的?
我不同意,当您需要检查某些东西是否尚未初始化,或者找不到数据时,空值是非常有用的,有时您希望将空值传递给一个方法及其罚款,代码约定对于服务于许多类的公共方法和API定义都很好。如果您在一个分层的体系结构中编写代码,那么您只需要保护层之间的交互,并且在每个层中都是空安全的。
你的域得到了空值,它是可以的。