我应该对Visual Studio中的代码分析合规性有多严格?

ser*_*0ne 2 warnings code-analysis fxcop standards-compliance visual-studio

在为我正在开展的一个小项目中使用Code Analysis之后,我想知道在解析代码符合分析时我应该有多严重.

我知道我可以为此禁止警告,但对我来说,在某种程度上抑制警告是一个警告(没有双关语意图......"FXCop").

示例警告:

不要在意外位置引发异常'CustomObject.Equals(object)'会创建类型为'ArgumentException'的异常.在这种方法中不应该提出例外.如果可能引发此异常实例,请更改此方法的逻辑,以便不再引发异常.

扔这个的原因......

CustomObject.Equals(object)可能会尝试比较CustomObject和FooBarObject ...它们甚至不是同一类型,所以在这个实例中,我应该抛出异常,还是只返回false?


一般来说,我是否应该真正肛门(因为想要一个更好的词)使我的代码绝对合规,或者我会遇到需要警告抑制的情况?

Han*_*ant 5

FxCop警告只是警告,它们不会标记无效代码.这是编译器的工作.FxCop使用的规则是从多年编写.NET代码的经验中收集的.它们代表"最佳实践",并且通常会提醒您意外后果以及.NET编程中比较模糊的部分,如CAS.

请务必参阅文档以了解规则存在的原因.对于CA1065,您将看到:

Equals方法应返回true或false,而不是抛出异常.例如,如果Equals传递两个不匹配的类型,它应该返回false而不是抛出ArgumentException.

这与您的使用完全匹配,您可以毫不费力地采纳这些建议.不幸的是,创建规则的确切原因有点简短.这真的没有超越"不要扔在意想不到的地方"的指导.这里出乎意料的结果是,如果他不想让代码失败,那么使用你的类的另一个程序员将​​不会意识到需要try/catch.随意在您的Equals方法中放置Debug.Assert().有很多情况下你会忽略这些建议,例如,CA2000特别容易出现虚假警告.如有必要,应用[SuppressMessage]属性,不必再次查看它.