哪种代码更好:
int index = fileName.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase);
或
int index = fileName.LastIndexOf(".", StringComparison.OrdinalIgnoreCase);
FXCop通常更喜欢OrdinalIgnoreCase。但是你的要求可能会有所不同。
OrdinalIgnoreCase
对于英语来说,差别很小。当你接触到具有不同书面语言结构的语言时,这就成了一个问题。我没有足够的经验给你更多。
对象返回的StringComparer OrdinalIgnoreCase属性处理 字符串中的字符 比较,就好像它们被转换了一样 使用大写的约定 不变的文化,然后 执行简单的字节比较 这与语言无关。 这是最合适的时候 比较生成的字符串 编程方式或比较时 不区分大小写的资源,例如 路径和文件名。 http://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase.aspx < / p >
InvariantCultureIgnoreCase
对象返回的StringComparer InvariantCultureIgnoreCase财产 在语言上比较字符串 忽略case的相关方式,但是 它不适合在任何地方展示 特定的文化。它的主要 中的字符串排序 这样它们就完全相同了 文化。 http://msdn.microsoft.com/en-us/library/system.stringcomparer.invariantcultureignorecase.aspx < / p > 不变区域性是 对象返回的CultureInfo对象 InvariantCulture财产。< / p > < p > InvariantCultureIgnoreCase 属性实际返回一个实例 类派生的匿名类的 StringComparer类。< / p >
不变区域性是 对象返回的CultureInfo对象 InvariantCulture财产。< / p > < p > InvariantCultureIgnoreCase 属性实际返回一个实例 类派生的匿名类的 StringComparer类。< / p >
这两种代码都不是更好的。他们做不同的事情,所以他们擅长不同的事情。
InvariantCultureIgnoreCase使用基于英语的比较规则,但没有任何区域差异。这对于考虑到一些语言方面的中性比较来说是很好的。
OrdinalIgnoreCase比较没有文化方面的字符代码。这适用于精确的比较,如登录名,但不适用于对具有不寻常字符的字符串进行排序,如é或ö。这也更快,因为在比较之前不需要应用额外的规则。
é
ö
你似乎在做文件名比较,所以我只会添加OrdinalIgnoreCase是最亲密的到NTFS所做的(它不完全相同,但它比InvariantCultureIgnoreCase更接近)
如果你真的只想匹配点,那么StringComparison.Ordinal将是最快的,因为没有大小写差异。
StringComparison.Ordinal
"Ordinal"不使用区域性和/或大小写规则,这些规则在.等符号上是不适用的。
.