2013-03-21 3 views
17

Wenn dies kein Fehler ist, kann dann jemand den Grund für dieses Verhalten erklären? Tatsächlich scheint es, dass jede ungerade Anzahl von Buchstaben falsch zurück:"aaaa" .StartsWith ("aaa") gibt false zurück

string test = "aaaaaaaaaaaaaaaaaaaa"; 
Console.WriteLine(test.StartsWith("aa")); 
Console.WriteLine(test.StartsWith("aaa")); 
Console.WriteLine(test.StartsWith("aaaa")); 
Console.WriteLine(test.StartsWith("aaaaa")); 
Console.WriteLine(test.StartsWith("aaaaaa")); 
Console.WriteLine(test.StartsWith("aaaaaaa")); 

Ausbeuten Ausgangs folgenden, wenn sie auf einem dänischen System ausgeführt:

True 
False 
True 
False 
True 
False 
+3

Ich glaube nicht, dass es wahr sein kann. Zum Beispiel, in Ideone, [nicht] (http://ideone.com/F3S7vQ) Kann eine "Culture" Sache vielleicht sein .. –

+1

Ich habe Ihren Code-Ausschnitt kopiert und in LINQPad eingefügt - jede Zeile gab 'true'. –

+1

Wie machst du das? Ich habe deinen Code kopiert und er liefert alles "Wahr". –

Antwort

22

Dies ist sicherlich aufgrund Ihrer aktuellen Kultur. Sie können auf Dänisch sein, in der aa als ein Brief gilt. Wenn Sie versuchen, die Kultur zu ändern .. oder der Fall, es soll funktionieren.

Ich glaube, ich ein ähnliches Verhalten mit ungarischen Kulturen und Schreiben Verbände

Werfen Sie einen Blick auf String StartsWith() issue with Danish text

Beispiel erinnern:

using System; 
using System.Globalization; 

namespace Demo 
{ 
    public static class Program 
    { 
     public static void Main(string[] args) 
     { 
      System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("da-DK"); 
      System.Threading.Thread.CurrentThread.CurrentCulture = System.Threading.Thread.CurrentThread.CurrentUICulture; 
      string test = "aaaaaaaaaaaaaaaaaaaa"; 
      Console.WriteLine(test.StartsWith("aa")); 
      Console.WriteLine(test.StartsWith("aaa")); 
      Console.WriteLine(test.StartsWith("aaaa")); 
      Console.WriteLine(test.StartsWith("aaaaa")); 
      Console.WriteLine(test.StartsWith("aaaaaa")); 
      Console.WriteLine(test.StartsWith("aaaaaaa")); 
     } 
    } 
} 

Dies druckt, was die OP Ansprüche.

+4

Ausführen von 'Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo (" hu-hu ");' bevor sein Code immer noch zu allen Zeilen führt, die "True" ergeben. –

+0

Meine appologies .. Es ist dänisch. Probieren Sie und setzen Sie Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo ("da-DK"); – Kek

+0

In der Tat, Danish ergibt die erwarteten - oder eher * unerwarteten * - Ergebnisse des OP: 'Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo (" da ");' –