C#中的代码约定和空检查

zac*_*ary 6 c# code-contracts c#-4.0

在我的代码中我做了很多:

myfunction (parameter p)
{
  if(p == null)
   return;
}
Run Code Online (Sandbox Code Playgroud)

我如何用代码合同替换它?

我有兴趣找出是否已传入null并通过静态检查捕获它.

如果在测试期间传入null,我有兴趣抛出合同异常

对于生产我想退出该功能.

代码合同可以做到这一点吗?这对代码合同有用吗?

Tim*_*mwi 6

语法如下:

Contract.Requires(p != null);
Run Code Online (Sandbox Code Playgroud)

这需要在方法的顶部。所有Contract.Requires(和其他合同声明)必须在方法中的所有其他声明之前。


arc*_*ain 1

这里这里的这些帖子有很多很棒的选择。

编辑:我第一次误读了你的帖子,以为你抛出了 ArgumentNullException 或者其他什么东西,直到我看到 Jon Skeet 的评论。我绝对建议至少使用链接问题中提供的多种方法中的一种。

在此复制 John Feminella 的答案之一:

[Pure]
public static double GetDistance(Point p1, Point p2)
{
    CodeContract.RequiresAlways(p1 != null);
    CodeContract.RequiresAlways(p2 != null); 
    // ...
}
Run Code Online (Sandbox Code Playgroud)