可能是什么原因 -
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)
的额外操作的处理?
答案 0 :(得分:5)
我无法立即给出示例,但我怀疑有些情况下第一个会返回true
,但第二个返回false
。两个值在 sort 顺序方面可能相等,但即使在忽略大小写的规则下仍然是不同的。例如,一个文化可能决定在排序时不将重音视为重要,但仍然只能查看两个字符串,这些字符串仅在重音符号中不相等。 (或者反过来可能是正确的 - 两个字符串可能被认为是相同的,但是一个字符串在逻辑上先于另一个字符串。)
如果你基本上对排序顺序而不是相等感兴趣,那么使用Compare
是有意义的。如果代码将被翻译,它也可能是有意义的 - 例如对于LINQ - 并且支持Compare
的重载但Equals
的重载不是。
我会试着想出一个他们不同的例子。我当然会说这很少见。编辑:到目前为止没有运气,尝试过口音,Eszet,土耳其语“I”处理,以及不同类型的空间。尽管如此,这还远远不够。