ToLower vs ToLowerInvariant
我只是在寻找这两种方法产生不同结果的任何例子。首先,我访问了msdn页面,运行其中的代码,并做了一些小的更改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | using System; using System.Globalization; using System.Linq; class Program { static void Main() { string[] words = {"Tuesday","Sal?","Вторник","Mardi", "Τρ?τη","Martes","??? ?????", "????????","?????????" }; Console.BufferHeight = 1000; var test = CultureInfo.GetCultures(CultureTypes.AllCultures) .Select(ci => { string[] wordsToLower = words.Select(x => x.ToLower(ci)).ToArray(); string[] wordsToLowerInvariant = words.Select(x => x.ToLowerInvariant()).ToArray(); return new { Culture = ci, ToLowerDiffers = !wordsToLower.SequenceEqual(wordsToLowerInvariant) }; }) .ToArray(); foreach (var x in test) { Console.WriteLine("Culture {0}, ToLower and ToLowerInvariant produces different results: {1}", x.Culture, x.ToLowerDiffers); } Console.WriteLine(); Console.WriteLine("Difference exists for any ToLower call: {0}", test.Any(x => x.ToLowerDiffers)); } } |
但这里我有一个问题:这个代码为所有现有文化中的
所以问题是:有任何字符串可以为这个测试产生不同的结果吗?
试试土耳其点的
1 2 3 4 5 6 7 8 | var culture = new CultureInfo("tr-TR"); string test ="?"; if (test.ToLower(culture) == test.ToLowerInvariant()) Console.WriteLine("Same"); else Console.WriteLine("Different"); // Prints this! |
XXXInvariant假定区域性设置为默认设置。为了能够显示差异,您应该演示tolower和tolowerinvariant,其文化信息与设置中的默认文化不同。默认情况下,默认的区域性是系统区域性。
因此,如果系统的文化是en-us,并且代码中只使用en-us字符,tolower和tolowerinvariant将给出相同的结果。
据我所知,如果你换"sal"?对于tolowerinvariant后面的"sali",您应该得到"sali"。