Jakie są powody, dla których nie należy używać "==" do porównywania zlokalizowanych ciągów w .NET? W jaki sposób porównanie wykona się w odniesieniu do CultureInfo, jeśli z niego skorzystam?Czy należy używać '==' do porównań ciągów zlokalizowanych .NET?
Odpowiedz
==
jest niewrażliwy na kulturę - jest to proste porównanie porządkowe. Tak więc dwa łańcuchy, które są kulturowo równe - lub nawet równe pod względem innych form kanonizacji - mogą być równe , które są równe przez ==
. W zasadzie traktuje każdy ciąg jak tablicę char
.
Przeciążone String.operator ==
wykona nieporównywalne porównanie kulturowe – porównuje łańcuchy bajt po bajcie przy użyciu heavily optimized unrolled loop.
To wywołuje tę samą funkcję wewnętrznego jako String.Equals(a, b, StringComparison.Ordinal)
Jeśli porównać ciągi kultury świadomy == z, na przykład „Strasse” z „Straße”, zwraca false.
Jeśli potrzebujesz materiałów porównawczych uwzględniających kulturę dla plików UI (Sortowanie listy), używaj String.Compare z powiązaną informacją kulturową.
CultureInfo ci = new CultureInfo("de-DE");
String.Compare("Strasse", "Straße", true, ci) // Returns zero
+1 dla przykładu. – Otiel
Pytasz o operator C# '=='? Jeśli tak, powinieneś dodać znacznik C#. – phoog