EndsWith出现意外行为

时间:2014-02-09 19:38:25

标签: c#

有人可以解释这种行为吗?

" ".EndsWith(((char)9917).ToString()) // returns true

StartsWith的作品相同。

2 个答案:

答案 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以确定相等性)