CA1307:指定不为string.Equals抛出StringComparison(字符串)

时间:2016-02-19 15:50:13

标签: c# static-analysis string-comparison fxcop static-code-analysis

我想知道为什么静态代码分析(VS 2015)在使用String.Equals(string)时不会导致错误。所以

"file".Equals("FILE")

不会导致代码分析错误,而

String.Compare("file", "FILE", true)

会导致CA 1307错误。

此规则的文档在MSDN

上显示
  

许多字符串操作,最重要的是Compare和 Equals 方法,提供了一个接受StringComparison枚举值作为参数的重载。

     

每当存在一个带有StringComparison参数的重载时,应该使用它而不是不带此参数的重载。通过明确设置此参数,您的代码通常会更清晰,更易于维护。

从此我可以预期第一个例子会导致CA 1307错误。

因此,在这种情况下不抛出错误在某些情况下可能非常危险,并导致“错误”的应用程序。

我在这里错过了什么吗?

如果这是设计的,有什么办法可以达到预期的行为吗?

1 个答案:

答案 0 :(得分:1)

您传递布尔值的比较方法,而比较函数需要StringComparison枚举值。

String.Compare("file", "FILE", StringComparison.InvariantCultureIgnoreCase);

这应该返回一个真实的回应,因为你忽略了大小写。