我应该压制CA1062:验证公共方法的参数吗?

bri*_*ner 5 code-analysis fxcop visual-studio-2010 ca1062 visual-studio

我最近从Visual Studio 2008将项目升级到Visual Studio 2010.

在Visual Studio 2008中,此代码分析规则不存在.

现在我不确定我是否应该使用这条规则.

我正在构建一个开源库,因此让人们免于犯错似乎很重要.但是,如果我要做的就是ArgumentNullException在参数出现时抛出null,它似乎编写无用的代码,因为ArgumentNullException即使我不编写该代码也会被抛出.

编辑:此外,还有一个性能问题需要解决.检查null每种公共方法都可能导致性能问题.

我应该删除该规则还是修复违规行为?

Bri*_*sen 6

那要看.使用ArgumentNullException时的约定是在描述中包含null参数的名称.因此呼叫者将确切地知道出了什么问题.

NullReferenceException的源(如果你不验证会发生这种情况)很容易发现,但如果方法很复杂,可能会更困难.您最终可能会遇到一行代码,其中多个引用可能为null.

我个人更喜欢让公共方法抛出ArgumentNullException,如果它们不能处理给定参数的空输入,因为无论方法如何实现,它都允许一致的行为.

回复编辑:在我看来,提供一组一致的接口比提供优化每行代码更少的意外更为重要.我的猜测是,在大多数情况下,空检查的性能开销不会很大.如果它确实是一个问题(如在分析中所说),我会考虑改变它.否则我不认为这是一个问题.