string.Equals(c#)的culture参数何时实际产生影响的示例?

我不完全理解string.Equals的第二个参数,这是因为我找不到任何实际会产生影响的例子。 例如,这里给出的示例是相同的,无论第二个参数的值如何(除了IgnoreCase): http : //msdn.microsoft.com/en-us/library/c64xh8f9.aspx

我只是在讨论StringComparison.CurrentCulture,InvariantCulture或Ordinal的值。
我可以理解这些与IgnoreCase等价物之间的区别。

此 MSDN页面(在.NET Framework中使用字符串的最佳实践)有很多关于使用字符串的信息,以下示例取自它:

using System; using System.Globalization; using System.Threading; public class Example { public static void Main() { string[] values= { "able", "ångström", "apple", "Æble", "Windows", "Visual Studio" }; Array.Sort(values); DisplayArray(values); // Change culture to Swedish (Sweden). string originalCulture = CultureInfo.CurrentCulture.Name; Thread.CurrentThread.CurrentCulture = new CultureInfo("sv-SE"); Array.Sort(values); DisplayArray(values); // Restore the original culture. Thread.CurrentThread.CurrentCulture = new CultureInfo(originalCulture); } private static void DisplayArray(string[] values) { Console.WriteLine("Sorting using the {0} culture:", CultureInfo.CurrentCulture.Name); foreach (string value in values) Console.WriteLine(" {0}", value); Console.WriteLine(); } } // The example displays the following output: // Sorting using the en-US culture: // able // Æble // ångström // apple // Visual Studio // Windows // // Sorting using the sv-SE culture: // able // Æble // apple // Windows // Visual Studio // ångström 

StringComparison.InvariantCultureStringComparison.Ordinal之间的差异相当容易找到,因为Ordinal意味着字符串在比较之前没有规范化。 所以我们只需将标准化字符串与非标准化字符串进行比较。

查找StringComparison.InvariantCultureStringComparison.CurrentCulture (或不同CurrentCulture之间的差异)之间的差异有点困难,但它们确实存在。

这是一个例子:

  string a = "\u00C4"; // "LATIN CAPITAL LETTER A WITH DIAERESIS" string b = "\u0041\u0308"; // "LATIN CAPITAL LETTER A" - "COMBINING DIAERESIS" Console.WriteLine(a.Equals(b, StringComparison.InvariantCulture)); // true Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); Console.WriteLine(a.Equals(b, StringComparison.CurrentCulture)); // true Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK", false); Console.WriteLine(a.Equals(b, StringComparison.CurrentCulture)); // false Console.WriteLine(a.Equals(b, StringComparison.Ordinal)); // false 

或者只使用ASCII字符的那个:

  string ddzs = "ddzs"; string dzsdzs = "dzsdzs"; Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); Console.WriteLine(ddzs.Equals(dzsdzs, StringComparison.CurrentCulture)); // false Thread.CurrentThread.CurrentCulture = new CultureInfo("hu-HU", false); Console.WriteLine(ddzs.Equals(dzsdzs, StringComparison.CurrentCulture)); // true