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

本文关键字:意外 NET StartsWith 为什么 | 更新日期: 2023-09-27 18:37:20

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

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

我在这里缺少什么吗?

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

重复评论:

我不具体了解 .NET,但我怀疑如果StartsWith遵循排序规则,其中nny是一个字母,例如匈牙利语,您可能会观察到这种现象。如果我是对的,并且如果您将排序规则更改为中性排序规则,那么您的"错误"就会消失。:)

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

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

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

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