高效(?)字符串比较

时间:2013-06-26 05:40:31

标签: c# .net performance string-comparison processing-efficiency

可能是什么原因 -

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)的额外操作的处理?

1 个答案:

答案 0 :(得分:5)

我无法立即给出示例,但我怀疑有些情况下第一个会返回true,但第二个返回false。两个值在 sort 顺序方面可能相等,但即使在忽略大小写的规则下仍然是不同的。例如,一个文化可能决定在排序时不将重音视为重要,但仍然只能查看两个字符串,这些字符串仅在重音符号中不相等。 (或者反过来可能是正确的 - 两个字符串可能被认为是相同的,但是一个字符串在逻辑上先于另一个字符串。)

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

我会试着想出一个他们不同的例子。我当然会说这很少见。编辑:到目前为止没有运气,尝试过口音,Eszet,土耳其语“I”处理,以及不同类型的空间。尽管如此,这还远远不够。