【问题标题】:CA1307: Specify StringComparison not thrown for string.Equals(string)CA1307:指定不为 string.Equals(string) 抛出 StringComparison
【发布时间】: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 错误。

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

我错过了什么吗?

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 对不起,但这不是我问题的答案。 A 在询问为什么第一个示例 "file".Equals("FILE") 在未指定 String.Comparison 时没有引发 CA 1307 错误。
    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多