2013-03-21 22 views
17

如果这不是一个错误,任何人都可以解释此行为背后的原因吗?事实上,它似乎每一个奇数的信件将返回false:“aaaa”.StartsWith(“aaa”)返回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")); 

收益率时,丹麦的系统上执行以下的输出:

True 
False 
True 
False 
True 
False 
+3

我不相信这是真的。例如,在Ideone中,[not](http://ideone.com/F3S7vQ)可能是'文化'的东西也许.. – 2013-03-21 12:34:52

+1

我已经将你的代码片段复制并粘贴到LINQPad - 每一行都给出了'true'。 – 2013-03-21 12:34:57

+1

你最近怎么样?我复制了你的代码,它产生了所有'真'。 – 2013-03-21 12:35:17

回答

22

这当然是由于目前的文化。 您可能在丹麦语中,aa被认为是一封信。 如果您尝试改变文化......或案例,它将起作用。

我想我还记得与匈牙利的文化和信协会

类似的行为,看一下String StartsWith() issue with Danish text

例子:

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

这将打印什么OP索赔。

+4

执行'Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(“hu-hu”);'在他的代码仍然导致所有行产生'True'。 – 2013-03-21 12:39:38

+0

我的appologies ..这是丹麦语。尝试并设置Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(“da-DK”); – Kek 2013-03-21 12:42:14

+0

但是,的确,丹麦人产生了OP的预期结果 - 或者说是意想不到的结果:Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(“da”);' – 2013-03-21 12:42:17