有人能解释这种行为吗?
" ".EndsWith(((char)9917).ToString()) // returns true
StartsWith的工作方式相同。
有人能解释这种行为吗?
" ".EndsWith(((char)9917).ToString()) // returns true
StartsWith的工作方式相同。
Windows 7上的.NET Framework 4支持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在评论中的说法,与文档相反,这在后续版本中没有改变。
如评论中所述,如果没有提供 StringComparison Type,则 endswith
方法使用当前 Culture。
您可以通过使用序数比较来使其工作:
" ".EndsWith(((char)9917).ToString(), StringComparison.Ordinal); //false
(Ordinal 最终将比较字符的 bytes
以确定相等性)
string.Equals(((char)9917).ToString, "", StringComparison.CurrentCulture)
也返回true
。 - Lasse V. Karlsen