Differenze tra StringComparison.InvariantCulture
e StringComparison.Ordinal
sono abbastanza facile da trovare, poiché Ordinal significa che la stringa non viene normalizzata prima di essere confrontata. Quindi dobbiamo solo confrontare una stringa normalizzata con una stringa non normalizzata.
Trovare le differenze tra StringComparison.InvariantCulture
e StringComparison.CurrentCulture
(o le differenze tra i diversi CurrentCulture
s) è un po 'più difficile, ma esistono.
Ecco un esempio:
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
O questo uno che utilizza solo caratteri 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
fonte
2010-05-27 10:11:05
Grazie, che è esattamente quello che stavo cercando. Ha almeno due esempi: \ u0000 è uguale a un carattere null se il parametro è cultura invariante, ma non se è ordinale. \ u0061 \ u030a è uguale a \ u00e5 se il parametro è cultura invariante, ma non se è ordinale. – zod