Kültüre bağlı dize karşılaştırmaları altında hangi kuralların bulunduğunu bilmek kolay değildir. U + 0022 "
(QUOTATION MARK) ve U + 204D ⁍
(BLACK RIGHTWARDS BULLET) noktalamalarının, kültür karşılaştırmaları altında (değişmez kültürünkiler dahil) "eşit" olduğu düşünülüyor.
// culture-sensitive:
Console.WriteLine("\"".StartsWith("⁍"));
Console.WriteLine("⁍".StartsWith("\""));
Console.WriteLine("\"".StartsWith("⁍", StringComparison.InvariantCulture));
Console.WriteLine("⁍".StartsWith("\"", StringComparison.InvariantCulture));
Console.WriteLine("\"".Equals("⁍", StringComparison.CurrentCulture));
Console.WriteLine("⁍".Equals("\"", StringComparison.CurrentCulture));
Console.WriteLine("\"".Equals("⁍", StringComparison.InvariantCulture));
Console.WriteLine("⁍".Equals("\"", StringComparison.InvariantCulture));
Console.WriteLine(StringComparer.CurrentCulture.Equals("\"", "⁍"));
Console.WriteLine(StringComparer.CurrentCulture.Equals("⁍", "\""));
Console.WriteLine(StringComparer.InvariantCulture.Equals("\"", "⁍"));
Console.WriteLine(StringComparer.InvariantCulture.Equals("⁍", "\""));
Console.WriteLine("\"".CompareTo("⁍"));
Console.WriteLine("⁍".CompareTo("\""));
Console.WriteLine(StringComparer.CurrentCulture.Compare("\"", "⁍"));
Console.WriteLine(StringComparer.CurrentCulture.Compare("⁍", "\""));
Console.WriteLine(StringComparer.InvariantCulture.Compare("\"", "⁍"));
Console.WriteLine(StringComparer.InvariantCulture.Compare("⁍", "\""));
Diğer örnekler string
örneğin, static
yöntemleri verilmiş olabilir, ama bunlar eşdeğerdir: Bu örnekler bütün olduğunu göstermektedir. Bir sıralı karşılaştırma kesinlikle U + 0022 (az) farklı olmalıdır sayesinde
U + 204D (bu kadar basit!):
// ordinal:
Console.WriteLine("\"".StartsWith("⁍", StringComparison.Ordinal));
Console.WriteLine("⁍".StartsWith("\"", StringComparison.Ordinal));
Console.WriteLine("\"".Equals("⁍"));
Console.WriteLine("⁍".Equals("\""));
Console.WriteLine(StringComparer.Ordinal.Equals("\"", "⁍"));
Console.WriteLine(StringComparer.Ordinal.Equals("⁍", "\""));
Console.WriteLine(StringComparer.Ordinal.Compare("\"", "⁍"));
Console.WriteLine(StringComparer.Ordinal.Compare("⁍", "\""));
bir unicode doğru char ismini bak tablo. Unicode karşılaştırmaları inceliklidir. Örneğin, kubbe karşılaştırmalarında belirli karakterler (örneğin, sıfır genişlikli (olmayan) birleştirici veya belirli modifiye ediciler) göz ardı edilir. – CodesInChaos
Basit kurallar istiyorsanız, sıralı karşılaştırma kullanın. – CodesInChaos
@CodesInChaos Ordinal'e geçmek isterim ve bu ve diğer birçok kişi geldiğinde olası kırılma değişikliklerinden geçiyorum. – Zoom