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

Posted

技术标签:

【中文标题】CA1307:指定不为 string.Equals(string) 抛出 StringComparison【英文标题】:CA1307: Specify StringComparison not thrown for string.Equals(string) 【发布时间】:2016-02-19 15:50:13 【问题描述】:

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

"file".Equals("FILE")

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

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

确实会导致 CA 1307 错误。

此规则的文档在MSDN 上说

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

只要存在采用 StringComparison 参数的重载,就应该使用它而不是不采用此参数的重载。通过显式设置此参数,您的代码通常会更清晰、更易于维护。

据此,我预计第一个示例会导致 CA 1307 错误。

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

我错过了什么吗?

如果这是设计使然,有什么方法可以实现预期的行为?

【问题讨论】:

【参考方案1】:

您的 compare 方法传递的是布尔值,而 Compare 函数需要 StringComparison 枚举值。

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

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

【讨论】:

对不起,但这不是我问题的答案。 A 在询问为什么第一个示例 "file".Equals("FILE") 在未指定 String.Comparison 时没有引发 CA 1307 错误。

以上是关于CA1307:指定不为 string.Equals(string) 抛出 StringComparison的主要内容,如果未能解决你的问题,请参考以下文章

如何在 c# (CA1307) 中使用 StringComparison?

java-5

第六讲

String.equals()方法整理String类的Length()charAt() getChars()replace() toUpperCase() toLowerCase()tr

C#.Net代码精简优化(空操作符(??)asstring.IsNullOrEmpty() string.IsNullOrWhiteSpace()string.Equals()Syste

String之“==”与equals