5

可能是什么原因使用 -

bool result = String.Compare(fieldStr, "PIN", true).Equals(0);  

代替,

bool result = String.Equals(fieldStr, "PIN", StringComparison.CurrentCultureIgnoreCase);

或者,甚至更简单 -

bool result = fieldStr.Equals("PIN", StringComparison.CurrentCultureIgnoreCase);

用于将.NET 中的两个字符串与 C# 进行比较?

我被分配到一个具有大型代码库的项目中,该项目放弃了使用第一个代码库进行简单的相等比较。我无法(还没有)找到那些高级人员使用这种方法的任何原因,而不是像第二种或第三种更简单的方法。Equals(静态或实例)方法是否存在任何性能问题?或者使用String.Compare方法是否有任何特定的好处,甚至超过了附加操作的处理.Equals(0)

4

1 回答 1

6

我无法直接举出例子,但我怀疑在某些情况下第一个会 return true,但第二个会 return false两个值在排序顺序方面可能相等,但即使在忽略大小写的规则下仍然是不同的。例如,一种文化可能决定在排序时不将重音视为重要,但仍将仅在重音字符上不同的两个字符串视为不相等。(或者反过来可能是正确的——两个字符串可能被认为是相等的,但一个在逻辑上在另一个之前出现。)

如果您基本上对排序顺序而不是相等性感兴趣,那么使用Compare是有意义的。如果要翻译代码(例如对于 LINQ)并且Compare支持 的重载但Equals不支持 的重载,这也可能是有意义的。

我会试着举一个他们不同的例子。我肯定会说这很少见。编辑:到目前为止没有运气,尝试过口音、Eszet、土耳其语“I”处理和不同类型的空格。虽然说它不会发生,但还有很长的路要走。

于 2013-06-26T05:44:43.010 回答