Warum sehe ich dieses unerwartete Verhalten von .NETs StartsWith?

7

Das muss ein .NET-Bug sein, oder?

"KonNy".StartsWith("Kon") gibt false zurück, während "KonNy".StartsWith("Ko") und "KonN".StartsWith("Kon") true zurückgeben.

Gibt es irgendetwas, was mir hier fehlt?

    
ggPeti 16.06.2012, 11:37
quelle

3 Antworten

14

Wiederholt von Kommentaren:

Ich weiß .NET nicht genau, aber ich vermutete, dass Sie dieses Phänomen beobachten könnten, wenn StartsWith einer Sortierung folgte, bei der nny ein einzelner Buchstabe war, wie z. B. Ungarisch. Wenn ich recht habe und wenn Sie Ihre Kollatierung auf eine neutrale ändern, würde Ihr "Bug" verschwinden. :)

    
Amadan 16.06.2012, 11:47
quelle
9

EDIT: Dies ist ein kultursensitives Thema, das sich nur in ungarischen Kulturen zeigt. Repro:

%Vor%

Ausgabe:

%Vor%

Wenn Sie einen kulturunabhängigen Vergleich wünschen, geben Sie StringComparison.Ordinal gemäß der Antwort von usr an.

    
Jon Skeet 16.06.2012 11:39
quelle
1

Ich vermute, dass Ihre Zeichenfolge einige nullbreite oder nicht druckbare Zeichen enthält. Der Unicode-Zeichenbereich enthält einige unangenehme Überraschungen. Versuchen Sie ToCharArray in Ihren String-Literalen aufzurufen und überprüfen Sie die resultierenden Zeichencodes.

Und versuchen Sie StartWith mit StringComparison.Ordinal aufzurufen, um sicherzustellen, dass Ihre Kultur nicht stört.

    
usr 16.06.2012 11:41
quelle

Tags und Links