class Class1
    {
        public static void Main()
        {
            String str1 = "Apple";
            String str2 = "Æble";
            String str3 = "Zebra";            Array stringArray = Array.CreateInstance(typeof(string),3);            stringArray.SetValue(str1,0);
            stringArray.SetValue(str2,1);
            stringArray.SetValue(str3,2);
                   Console.WriteLine("The Array initially contains the following strings:");
            PrintIndexAndValues(stringArray);
            Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
            Array.Sort(stringArray);
            Console.WriteLine("\nAfter sorting for the culture \"da-DK\":");
            PrintIndexAndValues(stringArray);
             
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
            Array.Sort(stringArray);
            Console.WriteLine("\nAfter sorting for the culture \"en-US\":");
            PrintIndexAndValues(stringArray);            Console.ReadKey();
        }
        public static void PrintIndexAndValues(Array myArray)
        {
            for (int i = myArray.GetLowerBound(0); i <=myArray.GetUpperBound(0); i++)
            {
                Console.WriteLine("{0}:{1}", i, myArray.GetValue(i));
            }
 
        }
    }请大侠帮我看下,为什么第二次改变当前线程当前culture为en-US以后,stringArray的排序顺序没变?和da-DK一样。谢谢各位,多多给分!

解决方案 »

  1.   

    你的这种方式改变语言,是否不可行?
    Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
    ArraySort排序方法难道能识别出线程对象的CurrentCulture 设置。
      

  2.   

    你确认这些字符串在 en-US 文化中的顺序和在 da-DK 文化中顺序是不一致的?
      

  3.   

    好乱,你用list<T>来排序啊
    或者用接口啊!
    Icomputer的Tocomput方法啊
      

  4.   

    所有字符全是unicode 这样排序按照这个顺序?
      

  5.   

    丹麦文和英语的排序是不一样的
    在丹麦文中,“Æ”是排在Z后的一个字母,所以"Æble"在Zebra的后面。
    在英文中,“Æ”被当做图形符号,所以应该排在apple前面如果只设置一次en-US或者只设置一次da-DK的话,排序很正确如果中间改变一次,就不行了
    culture好像设置成功了,但是排序不会变
    很奇怪
      

  6.   

    刚把你的程序改动了供参考, 如下:
            public static void Main()
            {
                String str1 = "Æble";
                String str2 = "Apple";
                String str3 = "Zebra";            Array stringArray = Array.CreateInstance(typeof(string), 3);
                stringArray.SetValue(str1, 0);
                stringArray.SetValue(str2, 1);
                stringArray.SetValue(str3, 2);            Console.WriteLine(" The Array initially contains the following strings:");            char lower = 'i';
                char upper = 'I';
                CultureInfo[] cultures = new CultureInfo[] {
                    CultureInfo.GetCultureInfo("da-DK"),
                    CultureInfo.GetCultureInfo("en-US"),
                    CultureInfo.GetCultureInfo("tr-TR") };
                foreach (CultureInfo culture in cultures)
                {
                    Thread.CurrentThread.CurrentCulture = culture;
                    Array.Sort(stringArray);
                    for (int i = stringArray.GetLowerBound(0); i <= stringArray.GetUpperBound(0); i++)
                    {
                        Console.WriteLine("{0}:{1} {2}", i, stringArray.GetValue(i), (int)stringArray.GetValue(i).ToString()[i]);
                    }                char toUpper = char.ToUpper(lower);
                    char toLower = char.ToLower(upper);
                    Console.WriteLine("Test: {0}->{1}, {2}->{3}", (int)lower, (int)toUpper, (int)upper, (int)toLower);                Console.WriteLine();
                }            Console.ReadKey();
            }查了下资料,ToUpper 和 ToLower 方法在默认情况下是文化区分的,但Array.Sort方法就不知道了。而且,ToUpper 和 ToLower 方法在 da-DK 和 en-US 文化下的结果是相同的,但在 tr-TR 文化下却有不同。 不知道是不是这个原因。