MSDN在StringComparison.OrdinalIgnoreCase上说:
OrdinalIgnoreCase属性返回的TheStringComparer将字符串中的字符视为比较,就好像它们使用不变文化的约定转换为大写一样,然后执行独立于语言的简单字节比较。 这在比较以编程方式生成的字符串或比较不区分大小写的资源(如路径和文件名)时最合适。
(https://msdn.microsoft.com/en-us/library/e6883c06(v=vs.110).aspx和https://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396)
然而,当我尝试比较时
String.Compare("a","A", StringComparison.OrdinalIgnoreCase)
返回的值为1
而不是0
。
更奇怪的是:
String.Compare("1","1", StringComparison.OrdinalIgnoreCase)
虽然字符串相等,但也返回1
。
我错过了什么?
答案 0 :(得分:2)
在挖掘一小时后找到原因:原来其中一个字符串包含一个不可见的字符%e2%80%8e(LEFT-TO-RIGHT MARK),仅在获取字符串并将其转换为数组时可见。
答案 1 :(得分:1)
我不确定你为什么会得到这个结果。当我通过LinqPad运行此代码时,我得到0。
如果外壳不相关,您可以尝试其他重载String.Compare(string, string, bool)
String.Compare("a","A", true);
String.Compare("1","1", true);