为什么我从.NET的StartsWith中看到这种意外行为?

时间:2012-06-16 11:37:37

标签: c# .net

这一定是.NET错误,对吧?

"KonNy".StartsWith("Kon")返回false,而"KonNy".StartsWith("Ko")"KonN".StartsWith("Kon")返回true。

这里有什么我想念的吗?

3 个答案:

答案 0 :(得分:15)

重复评论:

我并不特别了解.NET,但我怀疑如果StartsWith遵循nny是单个字母的整理,例如匈牙利语,您可能会发现这种现象。如果我是对的,如果你将整理改为中性,你的“虫子”就会消失。 :)

答案 1 :(得分:9)

编辑:这是一个文化敏感问题,仅在匈牙利文化中出现。 REPRO:

using System;
using System.Globalization;

class Test
{
    static void Main()        
    {
        foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures))
        {
            if (!"KonNy".StartsWith("Kon", false, culture))
            {
                Console.WriteLine(culture);
            }
        }
    }
}

输出:

hu
hu-HU

如果您想要对文化不敏感的比较,请根据usr的答案指定StringComparison.Ordinal

答案 2 :(得分:1)

我怀疑你的字符串中有一些零宽度或不可打印的字符。 Unicode字符空间包含一些讨厌的,不直观的惊喜。尝试在字符串文字上调用ToCharArray并检查生成的字符代码。

尝试使用StringComparison.Ordinal调用StartWith以确保您的文化不会干扰。