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一样。谢谢各位,多多给分!
{
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一样。谢谢各位,多多给分!
Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
ArraySort排序方法难道能识别出线程对象的CurrentCulture 设置。
或者用接口啊!
Icomputer的Tocomput方法啊
在丹麦文中,“Æ”是排在Z后的一个字母,所以"Æble"在Zebra的后面。
在英文中,“Æ”被当做图形符号,所以应该排在apple前面如果只设置一次en-US或者只设置一次da-DK的话,排序很正确如果中间改变一次,就不行了
culture好像设置成功了,但是排序不会变
很奇怪
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 文化下却有不同。 不知道是不是这个原因。