哪种代码更好:
int index = fileName.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase);
或者
int index = fileName.LastIndexOf(".", StringComparison.OrdinalIgnoreCase);
哪种代码更好:
int index = fileName.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase);
或者
int index = fileName.LastIndexOf(".", StringComparison.OrdinalIgnoreCase);
没有哪种代码总是更好。它们执行不同的任务,因此在不同的场景下表现出色。
InvariantCultureIgnoreCase
使用基于英语的比较规则,并且没有任何区域差异。这适用于进行中性比较,同时仍考虑某些语言方面的因素。
OrdinalIgnoreCase
比较字符代码而不考虑文化方面的因素。这适用于精确比较,例如登录名,但不适合对具有非常规字符(例如é
或 ö
)的字符串进行排序。由于在比较之前没有应用额外的规则,因此这也更快速。
ä
时,InvariantCultureIgnoreCase
如何行动?与 OrdinalIgnoreCase
相比呢? - Royi NamirOrdinalIgnoreCase
进行大小写转换,但是在比较字符代码时进行比较,所以 à
和 À
相等,但 A
和 À
不同。 - Guffastring s1 = "hello";string s2 = "héllo"; s1.Equals(s2, StringComparison.InvariantCulture)
返回 False?你说a和à被视为相同的... - Royi Namiré
会紧随 e
而不是在 z
之后。 - GuffaFXCop通常偏爱使用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类派生的匿名类的实例。
StringComparison.Ordinal
会是最快的选择,因为没有大小写区分。.
这样的符号上也不适用。OrdinalIgnoreCase
,这个选项最接近NTFS的操作方式(虽然不完全一样,但比InvariantCultureIgnoreCase
更接近)。