5

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

Assert.That(aParameter).IsNotNull();

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

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

我阅读了 Eric Smith 的帖子(此处)关于使用 ValidatedNotNullAttribute 来通知 FxCop 正在验证该参数,但我不知道如何使用我描述的流畅界面来完成此操作。

我有哪些选择,以便代码分析能够识别出上述语句满足要求并且不会出现警告?

4

1 回答 1

4

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

于 2011-11-23T16:05:27.480 回答