高效(?)字符串比较

ati*_*yar 5 .net c# performance string-comparison processing-efficiency

可能是什么原因使用 -

bool result = String.Compare(fieldStr, "PIN", true).Equals(0);  
Run Code Online (Sandbox Code Playgroud)

代替,

bool result = String.Equals(fieldStr, "PIN", StringComparison.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

或者,甚至更简单 -

bool result = fieldStr.Equals("PIN", StringComparison.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

用于比较.NET中的两个字符串和C#?

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

Jon*_*eet 5

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

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

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