有人可以解释这种行为吗?
" ".EndsWith(((char)9917).ToString()) // returns true
StartsWith的作品相同。
答案 0 :(得分:3)
.NET Framework 4 on Windows 7 includes support for Unicode 5.1:
字符串比较中使用的区分文化的排序和大小写规则取决于.NET Framework的版本。在.NET Framework 4中,排序,大小写,规范化和Unicode字符信息与Windows 7同步,并符合Unicode 5.1标准。
您使用的字符是Unicode 5.2字符,因此除了仅按数字比较字符的函数外,它可能在任何函数中都无法正常运行。
你应该在Windows 8和.NET 4.5上看到不同的行为(但我现在无法测试):根据文档,在这种情况下,支持Unicode 6.0。根据Thomas的说法评论中的Levesque与文档相反,在以后的版本中没有改变。
答案 1 :(得分:2)
如评论中所述,如果未提供StringComparison类型,endswith
方法将使用当前的Culture。
你可以通过使用序数比较来使它工作:
" ".EndsWith(((char)9917).ToString(), StringComparison.Ordinal); //false
(Ordinal将最终比较字符的bytes
以确定相等性)