is StringComparison.Ordinal the same as InvariantCulture for testing equality?
从简短的摘要描述来看,似乎字符串比较规则
1 | string.Equals(a, b, StringComparison....) |
另外,如果我们比较
请提供支持性论点和/或参考文献。
例如,它确实很重要-有一种叫做字符扩展的东西
1 2 3 4 5 | var s1 ="Strasse"; var s2 ="Stra?e"; s1.Equals(s2, StringComparison.Ordinal); // false s1.Equals(s2, StringComparison.InvariantCulture); // true |
使用
嗯,这当然很重要。当您使用"忽略大小写"相等比较时,您将在.NET框架中调用相当大的代码块,这些代码了解大小写规则在当前文化中的工作方式。这些规则对像我这样的前集邮爱好者来说非常有趣,根据你的长相,有一些非常奇怪的规则。土耳其语的i问题很有名,Unicode的家伙们不得不明确地为他们破例。
它实际上不是代码btw,而是查找表。本身很有趣,因为它需要MSFT为C编译器维护/linkres命令行选项。不能在自己的项目中使用编译选项。只有这样,mscorlib才能找到.nlp文件,文化规则的转换表。存储在与mscorlib.dll相同的GAC子目录中,编译选项的效果。
但我离题了。很明显,
对于额外的信用问题
比较混乱:不变与序数
…添加了序数排序的概念,并将序数成员添加到CompareOptions枚举中。选择它将忽略所有这些文化排序功能,并为您提供一个二进制排序,顺便说一下,也不会改变。
字符串比较不变式文化特征词与序数逻辑词?
C:字符串比较准则和常用用法
建议指出,对于文化不可知论比较,使用序数和序数病例比较。它们既快又安全。它们依赖于字节匹配,是匹配内部(非UI)处理字符串的最佳选项。