farklar oldukça vardır Ordinal, karşılaştırılmadan önce dizenin normalleştirilmediği anlamına gelir. Bu yüzden normalleştirilmiş bir dizeyi normal olmayan bir dizeyle karşılaştırmalıyız.
StringComparison.InvariantCulture
ve StringComparison.CurrentCulture
arasındaki farklar (veya farklı CurrentCulture
s arasındaki farklar) biraz daha zordur, ancak mevcutlar.
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
Veya yalnızca ASCII karakterleri kullanır bu bir:
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
Teşekkürler, bu benim aradığım de tam öyle
İşte bir örnek. En az iki örneği vardır: \ u0000, parametre değişmez kültür ise, boş karakterle aynıdır, ancak sıralı değilse. \ u0061 \ u030a, parametre değişmez kültür ise, ancak sıradan değilse, \ u00e5 ile aynıdır. – zod