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?
String.equals()方法整理String类的Length()charAt() getChars()replace() toUpperCase() toLowerCase()tr
C#.Net代码精简优化(空操作符(??)asstring.IsNullOrEmpty() string.IsNullOrWhiteSpace()string.Equals()Syste