将C#字符串与'=='进行比较是一种好习惯吗?

时间:2011-11-18 19:33:08

标签: c# .net string

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

5 个答案:

答案 0 :(得分:14)

==运算符是一种序数,文化无意识的字符串比较。它使用与.Equals相同的内部调用,对于“通常的”字符串比较来说非常好。

如果您需要文化意识比较(例如,用于GUI目的),例如德语double-s或ß,请使用

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

答案 1 :(得分:2)

比较字符串时,应使用明确指定要执行的比较类型的方法。这使您的代码更易于维护和读取。尽可能使用带有StringComparison枚举参数的System.String和System.Array类的方法的重载,以便您可以指定要执行的比较类型。在比较字符串时,最好避免使用==和!=运算符。另外,请避免使用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

答案 2 :(得分:2)

MSDN上有extensive documentation,其中涉及序数文化敏感字符串比较。 Ordinal 比较不关心语言学,默认情况下会关注案例。 文化敏感的比较确实关注语言学(案例,语言等)。

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

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

答案 3 :(得分:1)

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

是的,FxCop会发出警告,但警告是警告。如果你不关心文化,那么忽视它们是安全的。但是,就像现实生活中的警告一样,有时需要注意这些警告。

答案 4 :(得分:1)

如果字符串可能为null或为空(又称为“”),则要使用string.IsNullOrEmpty(...);

否则我的书或大多数东西都很好。取决于你的工作。