【问题标题】:Is it good practice to compare C# string with '=='?将 C# 字符串与“==”进行比较是一种好习惯吗?
【发布时间】:2011-11-18 19:33:08
【问题描述】:

将字符串与== 进行比较是一种好习惯吗?在string 上的CompareEquals 方法方面是否有等效于s1 == s2 的方法。如果使用这些方法,而不指定CultureInfo FxCop 会发出警告,这是一个真正的问题吗?

【问题讨论】:

标签: c# .net string


【解决方案1】:

== 运算符是一个有序的、文化不敏感的字符串比较。它使用与.Equals 相同的内部调用,并且适用于“通常”的字符串比较内容。

如果您需要文化感知比较(例如,出于 GUI 目的),例如德语双 s 或 ß,请使用

CultureInfo ci = new CultureInfo("de-DE");
String.Compare("Strasse", "Straße", true, ci)

【讨论】:

    【解决方案2】:

    当您比较字符串时,您应该使用明确指定您打算执行哪种比较的方法。这使您的代码更具可维护性和可读性。尽可能使用 System.String 和 System.Array 类的方法的重载,这些类采用 StringComparison 枚举参数,以便您可以指定要执行的比较类型。比较字符串时最好避免使用 == 和 != 运算符。另外,避免使用 String.CompareTo 实例方法,因为没有一个重载需要 StringComparison。

    根据您的需要,您可以使用以下方法之一:

    bool result = root.Equals(root2, StringComparison.Ordinal);
    result = root.Equals(root2, StringComparison.OrdinalIgnoreCase);
    bool areEqual = String.Equals(root, root2, StringComparison.Ordinal);
    

    此答案的来源:http://msdn.microsoft.com/en-us/library/cc165449.aspx

    【讨论】:

      【解决方案3】:

      MSDN 上有 extensive documentation 讨论 ordinalculture-sensitive 字符串比较。 Ordinal 比较不关心语言,默认情况下会关心大小写。 文化敏感比较确实关心语言学(大小写、标点符号等)。

      dotnetperls 上的 article 深入研究了性能影响,甚至展示了两种字符串比较方法(==equals)的 IL 和基准。

      最后,这个question 表明== 是严格的序数 字符串比较,不适合本地化 字符串。

      【讨论】:

        【解决方案4】:

        是的,这种做法很好。您也可以使用String.Compare,以及在Best Pratices for Using Strings in the .NET Framework 中找到的比较最佳实践。

        是的,FxCop 会发出警告,但警告就是警告。如果你不关心文化,忽略它们是安全的。但是,就像现实生活中的警告一样,注意它们有时是值得的。

        【讨论】:

          【解决方案5】:

          如果一个字符串可能为空或空(又名“”),你想使用 string.IsNullOrEmpty(...);

          否则它在我的书或大多数东西中都很好。取决于你在做什么。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-08-09
            • 1970-01-01
            • 2013-08-11
            • 2023-03-22
            • 2020-07-01
            • 2015-12-14
            • 1970-01-01
            相关资源
            最近更新 更多