通过流畅的验证来抑制CA1062

Son*_*ate 5 code-analysis visual-studio-2010 static-code-analysis

我有一个流畅,可扩展的验证助手,如:

Assert.That(aParameter).IsNotNull();
Run Code Online (Sandbox Code Playgroud)

它是可扩展的,因为That方法实际上是通用的(即<T>)并使用隐式类型来返回通用的IAssertCondition <T>对象.IsNotNull实际上是一种扩展方法.

无论如何,使用这种方法验证传递给方法的参数的问题是我得到CA1062警告,指示我在使用之前验证参数,当然,我已经在做了.

我阅读了Eric Smith的帖子(这里)关于使用ValidatedNotNullAttribute来告知FxCop该参数是否正在验证但是我不知道如何使用我所描述的流畅接口来实现这一点.

我的选择是什么,以便代码分析能够认识到上述陈述满足要求并且警告不会出现?

Nic*_*oiu 4

在这种情况下,您可以添加属性的唯一位置是方法的参数That<T>。不幸的是,虽然这会阻止 CA1062 触发,但它可能会导致漏报,因为您需要调用的不仅仅是That<T>实际实现“非空”验证。如果您想使用代码分析以识别验证助手的方式正确检查参数验证,您几乎必须编写自己的规则来替换 CA1062。