字符串比较:InvariantCultureIgnoreCase与OrdinalIgnoreCase?

JL.*_*JL. 164 c# string

哪个代码更好:

int index = fileName.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

要么

int index = fileName.LastIndexOf(".", StringComparison.OrdinalIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 233

两种代码都不总是更好.他们做不同的事情,所以他们擅长不同的事情.

InvariantCultureIgnoreCase使用基于英语的比较规则,但没有任何区域变化.这对于仍然考虑到一些语言方面的中性比较是有益的.

OrdinalIgnoreCase比较没有文化方面的字符代码.这对于精确比较很有用,比如登录名,但不能用于排序带有异常字符的字符串,如éö.这也更快,因为在比较之前没有额外的规则要应用.

  • @RoyiNamir:是的,这些案例在比较时会被忽略.`OrdinalIgnoreCase`进行大小写转换,但随后它在字符代码上进行比较,因此`à`和`À`相等,但是`A`和`À`是不同的. (11认同)
  • @RoyiNamir:是的,对于那个角色,它可以这样工作,其他角色实际上可以被评估为相等,或者一个角色可能等于另外两个角色.字符串""lasst"和"laßt"实际上是相等的. (11认同)
  • @RoyiNamir:是的,你是对的,字符不被视为严格相等,但是当你对字符串进行排序时,`é`将在'e`之后,而不是在'z`之后的某个地方. (7认同)
  • 根据你对我的第一个评论:为什么这个代码`string s1 ="hello"; string s2 ="héllo"; s1.Equals(s2,StringComparison.InvariantCulture)`返回False?你说a和à一样对待...... (5认同)
  • "InvariantCultureIgnoreCase"在遇到"ä"时表现得怎么样?反对'OrdinalIgnoreCase` ......? (3认同)
  • @Guffa严格来说,对密码进行不区分大小写的比较是一个坏主意。密码比较应该使用`Ordinal`,而不是`OrdinalIgnoreCase` (2认同)

Sky*_*ers 54

FXCop通常更喜欢OrdinalIgnoreCase.但您的要求可能会有所不同

对于英语,差别很小.当你徘徊于具有不同书面语言结构的语言时,这就变成了一个问题.我没有足够的经验给你更多.

OrdinalIgnoreCase

OrdinalIgnoreCase属性返回的StringComparer将字符串中的字符进行比较,就像使用不变文化的约定将它们转换为大写一样,然后执行独立于语言的简单字节比较.在比较以编程方式生成的字符串或比较不区分大小写的资源(如路径和文件名)时,这是最合适的. http://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase.aspx

InvariantCultureIgnoreCase

InvariantCultureIgnoreCase属性返回的StringComparer以语言相关的方式比较字符串,忽略大小写,但不适合在任何特定文化中显示.它的主要应用是以不同文化的方式对字符串进行排序. http://msdn.microsoft.com/en-us/library/system.stringcomparer.invariantcultureignorecase.aspx

不变文化是InvariantCulture属性返回的CultureInfo对象.

InvariantCultureIgnoreCase属性实际上返回从StringComparer类派生的匿名类的实例.


Han*_*ing 40

如果你真的想只匹配点,那么StringComparison.Ordinal将是最快的,因为没有区别.

"序数"不使用不适用于像a这样的符号的文化和/或套管规则..


Dea*_*ing 14

你似乎在做文件名比较,所以我只想补充一点,OrdinalIgnoreCase就是最接近什么NTFS呢(这是不完全一样,但它比更接近InvariantCultureIgnoreCase)

  • 你有没有NTFS的参考? (5认同)