哪种代码更好:
int index = fileName.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase);
或
int index = fileName.LastIndexOf(".", StringComparison.OrdinalIgnoreCase);
答案 0 :(得分:218)
两种代码都不会更好。他们做不同的事情,所以他们擅长不同的事情。
InvariantCultureIgnoreCase
使用基于英语的比较规则,但没有任何区域差异。这对于仍然考虑到某些语言方面的中性比较是有益的。
OrdinalIgnoreCase
比较没有文化方面的字符代码。这对于精确比较(如登录名)很有用,但不适用于排序包含é
或ö
等不常用字符的字符串。这也更快,因为在比较之前没有额外的规则要应用。
答案 1 :(得分:52)
FXCop通常更喜欢OrdinalIgnoreCase
。但您的要求可能会有所不同。
对于英语,差别很小。当你徘徊于具有不同书面语言结构的语言时,这就变成了一个问题。我没有足够的经验给你更多。
OrdinalIgnoreCase
由String返回的StringComparer OrdinalIgnoreCase属性对待 字符串中的字符 比较好像他们被转换了 使用约定大写 不变的文化,然后 执行简单的字节比较 这与语言无关。 这是最合适的 比较生成的字符串 以编程方式或比较时 不区分大小写的资源,例如 路径和文件名。 http://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase.aspx
InvariantCultureIgnoreCase
由String返回的StringComparer InvariantCultureIgnoreCase属性 在语言上比较字符串 忽略案件的相关方式,但是 它不适合任何显示 特殊文化。它的主要 应用程序是在一个命令中的字符串 方式将是相同的 文化。 http://msdn.microsoft.com/en-us/library/system.stringcomparer.invariantcultureignorecase.aspx
不变的文化是 CultureInfo对象返回 InvariantCulture属性。
InvariantCultureIgnoreCase property实际上返回一个实例 一个匿名类派生自 StringComparer类。
答案 2 :(得分:38)
如果你真的想只匹配点,那么StringComparison.Ordinal
将是最快的,因为没有任何区别。
“Ordinal”不使用不适用于.
等符号的文化和/或套管规则。
答案 3 :(得分:14)
您似乎正在进行文件名比较,因此我只想将OrdinalIgnoreCase
最接近添加到NTFS所做的事情(它不完全相同,但它比{{1}更近}})