9

これは.NETのバグに違いありませんね。

"KonNy".StartsWith("Kon")falseを返し、"KonNy".StartsWith("Ko")trueを"KonN".StartsWith("Kon")返します。

ここで足りないものはありますか?

4

3 に答える 3

15

コメントから繰り返される:

.NETについては具体的にはわかりませんが、ハンガリー語などの1文字StartsWithの照合をたどると、この現象が見られるのではないかと思います。nny私が正しければ、照合をニュートラルに変更すると、「バグ」は消えます。:)

于 2012-06-16T11:47:06.570 に答える
9

編集:これは文化の敏感さの問題であり、ハンガリーの文化でのみ見られます。再現:

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.Ordinalusrの回答に従って指定してください。

于 2012-06-16T11:39:59.927 に答える
1

文字列に幅がゼロの文字または印刷できない文字が含まれていると思われます。Unicode文字スペースには、厄介で直感的でない驚きが含まれています。文字列リテラルでToCharArrayを呼び出して、結果の文字コードを調べてみてください。

そして、StringComparison.Ordinalを使用してStartWithを呼び出して、文化が干渉しないことを確認してください。

于 2012-06-16T11:41:26.830 に答える