2013-03-21 36 views
17

Nếu đây không phải là lỗi, thì ai đó có thể giải thích lý do đằng sau hành vi này không? Trên thực tế có vẻ như rằng mỗi số lẻ của các chữ cái sẽ trả về false:"aaaa" .StartsWith ("aaa") trả về 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")); 

sản lượng đầu ra sau khi thực hiện trên một hệ thống Đan Mạch:

True 
False 
True 
False 
True 
False 
+3

Tôi không tin điều đó có thể đúng. Ví dụ, trong Ideone, [không] (http://ideone.com/F3S7vQ) Có thể là một điều 'Văn hóa' có thể .. –

+1

Tôi đã sao chép và dán đoạn mã của bạn vào LINQPad - mọi dòng đều cho' true'. –

+1

Bạn làm như thế nào? Tôi đã sao chép mã của bạn và nó mang lại tất cả 'Đúng'. –

Trả lời

22

Điều này chắc chắn là do văn hóa hiện tại của bạn. Bạn có thể bằng tiếng Đan Mạch, trong đó aa được coi là một lá thư. Nếu bạn thử thay đổi văn hóa .. hoặc trường hợp, nó sẽ hoạt động.

Tôi nghĩ rằng tôi nhớ hành vi tương tự với các nền văn hóa Hungary và các hiệp hội thư

Có một cái nhìn để String StartsWith() issue with Danish text

Ví dụ:

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

này in những gì tuyên bố OP.

+4

Thực thi 'Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo (" hu-hu ");' trước khi mã của anh ta vẫn cho kết quả trong tất cả các dòng sinh ra 'True'. –

+0

Ứng dụng của tôi .. Đó là danish. Hãy thử và đặt Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo ("da-DK"); – Kek

+0

Nhưng quả thực, Đan Mạch mang lại kết quả mong đợi - hay đúng hơn là * không mong đợi - kết quả của OP: 'Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo (" da ");' –

Các vấn đề liên quan