这一定是一个 .NET 错误,对吧?
"KonNy".StartsWith("Kon")
返回 false,while"KonNy".StartsWith("Ko")
并"KonN".StartsWith("Kon")
返回 true。
我在这里有什么遗漏吗?
从评论中重复:
我不具体了解 .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
如果您想要一个不区分文化的比较,请StringComparison.Ordinal
根据 usr 的答案指定。
我怀疑您的字符串中有一些零宽度或不可打印的字符。Unicode 字符空间包含一些令人讨厌的、不直观的惊喜。尝试在您的字符串文字上调用 ToCharArray 并检查生成的字符代码。
并尝试使用 StringComparison.Ordinal 调用 StartWith 以确保您的文化不会干扰。