Non è facile sapere quali regole si trovano nell'ambito dei confronti di stringhe dipendenti dalla cultura. Sembrerebbe abbastanza coerente che le punteggiature U + 0022 "
(QUOTATION MARK) e U + 204D ⁍
(BLACK RIGHTWARDS BULLET) siano considerate "uguali a sufficienza" in confronti di culture (comprese quelle della cultura invariabile). Questi esempi indicano che tutti:
// 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("⁍", "\""));
Altri esempi avrebbero potuto essere determinato, per esempio i metodi static
su string
, ma sono equivalenti.
Con un numero ordinale confronto , certamente U + 0022 deve essere diverso da (meno di) U + 204d (che è semplice!):
// 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("⁍", "\""));
fonte
2015-01-19 00:15:54
Cercare il nome del carattere proprio di un unicode tavolo. I confronti Unicode sono sottili. Ad esempio alcuni caratteri (ad esempio un joiner a larghezza zero (non) o determinati modificatori) vengono ignorati nei confronti della cupola. – CodesInChaos
Se si desiderano regole semplici, utilizzare confronti ordinali. – CodesInChaos
@CodesInChaos Vuoi passare a Ordinal e sto correndo attraverso i possibili cambiamenti che si verificano quando questo e molti altri sono venuti fuori. – Zoom