【发布时间】:2011-06-09 09:05:46
【问题描述】:
在我的代码中我经常这样做:
myfunction (parameter p)
{
if(p == null)
return;
}
如何用代码合同替换它?
我有兴趣找出是否传入了 null 并通过静态检查来捕获它。
如果在我们的测试期间传入 null,我有兴趣抛出合约异常
对于生产,我想退出该功能。
代码合约可以做到这一点吗?这对代码合约有用吗?
【问题讨论】:
-
为什么要在使用真实数据运行时有效地关闭安全检查?如果您的代码在生产环境中运行时出现错误,那么停止和中止您正在执行的任何操作不是同样重要(如果不是更重要的话)吗?
-
@Jon Skeet:在最近的一个 .Net Rocks 播客中,他们与 C# 4.0 代码合同的主要设计者之一进行了交谈,他们问了同样的问题。我希望我能像他那样解释清楚,但我怕我会弄错。他提出了一个非常有说服力的案例(当你在运行时检查合同时)为什么代码合同总体上更好。
-
@Neil:我没有反对代码合同......但我也会将它们留在生产中。
-
@Neil:我会让合约保持活动状态,这样如果你传入无效参数,它们就会抛出异常。
-
@Neil:是的,我不会关闭安全检查。这就是为什么我问为什么 OP 会 关闭它们(只是返回而不是抛出异常)。
标签: c# c#-4.0 code-contracts