2013-03-21 21 views
17

Jeśli to nie jest błąd, czy ktoś może wyjaśnić przyczynę tego zachowania? Rzeczywiście wydaje się, że każda liczba nieparzysta listów zwróci false:"aaaa" .StartsWith ("aaa") zwraca wartość false

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")); 

plony następujące wyjścia, gdy wykonywane w systemie duński:

True 
False 
True 
False 
True 
False 
+3

Nie wierzę, że to może być prawda. Na przykład w Ideone, [nie] (http://ideone.com/F3S7vQ) Może to być "Kultura" może .. –

+1

Skopiowałem i wkleiłem twój fragment kodu do LINQPad - każda linia dała "true". –

+1

Jak się masz? Skopiowałem twój kod i otrzymuję wszystkie "Prawdziwe". –

Odpowiedz

22

Jest to z pewnością z powodu aktualnej kultury. Możesz być w języku duńskim, w którym aa jest uważany za list. Jeśli spróbujesz zmienić kulturę .. lub przypadek, to zadziała.

Myślę Pamiętam podobne zachowanie z węgierskimi kultur i stowarzyszeń literowych

Mają wygląd String StartsWith() issue with Danish text

Przykład:

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")); 
     } 
    } 
} 

ten drukuje co twierdzi OP.

+4

Wykonywanie 'Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo (" hu-hu ");' zanim jego kod nadal będzie powodował, że wszystkie linie dają 'True'. –

+0

Moje appologies .. Jest duński. Spróbuj ustawić Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo ("da-DK"); – Kek

+0

Ale rzeczywiście, duński daje oczekiwane - lub raczej nieoczekiwane * - wyniki OP: "Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo (" da ");' –