これは.NETのバグに違いありませんね。
"KonNy".StartsWith("Kon")
falseを返し、"KonNy".StartsWith("Ko")
trueを"KonN".StartsWith("Kon")
返します。
ここで足りないものはありますか?
コメントから繰り返される:
.NETについては具体的にはわかりませんが、ハンガリー語などの1文字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を呼び出して、文化が干渉しないことを確認してください。