2011-01-05 50 views
6

我想知道当使用FxCop时,人们对CA1806 (DoNotIgnoreMethodResults)静态代码分析的警告是什么。抑制静态代码分析警告TryParse调用CA1806

我有几种情况下,我使用Int32.TryParse拉入保存在文件中的内部配置信息。我结束了大量的代码看起来像:

Int32.TryParse(someString, NumberStyles.Integer, CultureInfo.InvariantCulture, out intResult); 

MSDN说intResult的默认结果是零,如果失败的东西,这正是我想要的。

不幸的是,执行静态代码分析时,此代码将触发CA1806。这似乎是一个大量的冗余/无用的代码与类似下面的修复错误:

bool success = Int32.TryParse(someString, NumberStyles.Integer, CultureInfo.InvariantCulture, out intResult); 
if (!success) 
{ 
intResult= 0; 
} 

我应该取消此消息或硬着头皮,并添加这一切多余的错误检查?或者,也许有人有更好的主意来处理这样的情况?

谢谢!

+0

这个标题是不恰当的,请使用类似于:“什么时候可以吞下风格警告?”并适当地重新提出问题。就目前而言,这是有被封闭的危险“不是问题” – Firoso 2011-01-05 23:03:31

回答

0

压制走!

FxCop/Code Anaylysis只是真正的指导原则。它可以帮助改进代码的某些部分,特别是在将代码分发给其他开发人员使用时,但是在一天结束时,这只是一个指导方针,您可以根据自己的喜好编写代码。

+1

这只是一个指导原则,虽然我不同意遵循这封信的风格指南,但在这种情况下,它增加了使凶手的目的明确离开你的家门口。 – Firoso 2011-01-05 22:55:27

3

咬下子弹,或至少添加评论。 Johnny Homicidal编码器如何知道Int32.TryParse将在不查看外部文档的情况下提供0输出?同样,他如何知道0是你想要的默认值?后面的实现是特定的目的,所以我必须在这里同意FxCop。

请记住,约翰尼知道你住在哪里。

和我说,我OFTEN压制式警察,(很大程度上是因为我用的是一起玩的不好的异步CTP)。风格指南就是这个,指南。用你的脑袋,但总是在清晰度方面的错误是性能不成问题。

请记住,这样的行为可能会在未来发生变化,您是否总希望将0设为默认值?这能改变吗?即使您重构为ParseOrDefault帮助器方法,也应该考虑在产品生命周期中合理更改默认值。

+2

+1为JTHM参考! ;) – TrueWill 2011-01-05 23:01:02

+0

如果Johnny知道他的C#,他会知道这一点,因为被调用的方法是* required *为使用'out'修饰符声明的任何参数赋值。这对于'Int32.TryParse'来说并不特别。 – 2011-01-05 23:05:24

+0

除了对该方法的Int32.TryParse赋值仍然具体(尽管常见),还有,谁说约翰尼是竞争者? ;-)他只是杀人。 – Firoso 2011-01-05 23:09:17

5

为什么不重构你的TryParse s转换为单一功能与行为你是?:后

static int ParseOrDefault(string someStr) 
{ 
    int result = 0; 
    if(int.TryParse(someStr, out result)) 
    { 
     return result; 
    } 
    return 0; 
} 

这样,你避免了恼人的警告,沟冗余代码。一个单独的功能使你的期望明确,并且没有混淆的余地。

+0

这使我希望我们有静态扩展方法... – Firoso 2011-01-05 23:10:02

+1

为什么你有多个回报?这是一个非常糟糕的做法,会导致尴尬的测试和重构。 – Firoso 2011-01-05 23:13:52

+3

@Firoso - 这也可以作为字符串扩展方法(命名不同)。多重回报不会让我感到困扰,尤其是在短暂的功能。布鲁斯埃克尔似乎也不介意他们:http://onthethought.blogspot.com/2004/12/multiple-return-statements.html。但是如果你不喜欢它们,一定要避免它们。 – 2011-01-05 23:25:08