Я не полностью понимаю второй параметр строки. Равняется, и это вызвано тем, что я не могу найти примеры того, когда это на самом деле имело бы значение. Например, примером, данным здесь, является то же, независимо от значения второго параметра (кроме IgnoreCase): http://msdn.microsoft.com/en-us/library/c64xh8f9.aspx
Я просто говорю о значениях StringComparison. CurrentCulture, InvariantCulture, или Порядковый.
Я могу понять различие между ними и их эквивалентами IgnoreCase.
На этой странице MSDN (Best Practices for Using Strings in the .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