string.Equals(c#)的区域性参数实际起作用的示例?

string.Equals(c#)的区域性参数实际起作用的示例?,c#,string,C#,String,我不完全理解string.Equals的第二个参数,这是因为我找不到任何例子来说明它什么时候会真正起作用。例如,无论第二个参数(IgnoreCase除外)的值如何,此处给出的示例都是相同的: 我只是在谈论StringComparison.CurrentCulture、InvariantCulture或Ordinal的值。 我可以理解它们与IgnoreCase等价物之间的区别。MSDN page(在.NET Framework中使用字符串的最佳实践)提供了大量有关使用字符串的信息,下面的示例取自

我不完全理解string.Equals的第二个参数,这是因为我找不到任何例子来说明它什么时候会真正起作用。例如,无论第二个参数(IgnoreCase除外)的值如何,此处给出的示例都是相同的:

我只是在谈论StringComparison.CurrentCulture、InvariantCulture或Ordinal的值。
我可以理解它们与IgnoreCase等价物之间的区别。

MSDN page(在.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.InvariantCulture
StringComparison.Ordinal
之间的差异很容易找到,因为Ordinal意味着字符串在比较之前没有规范化。所以我们只需要比较一个规范化字符串和一个非规范化字符串

查找
StringComparison.InvariantCulture
StringComparison.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

谢谢,那正是我想要的。它至少有两个示例:\u0000在参数为不变区域性时与空字符相同,但在参数为序数时与空字符不同\如果参数为不变区域性,则u0061\u030a与\u00e5相同,但如果参数为序数,则不相同。