Häufige C# Fehler: falscher String Vergelichsoperator

Es gibt viele verschiedene Möglichkeiten, um Strings in C # zu vergleichen.

Obwohl viele Programmierer  den Operator == für String-Vergleich verwenden, ist es tatsächlich eine der ungünstigsten Methoden welche man nutzen kann, vor allem, weil sie nicht explizit im Code, die Art des ausgeführten Vergleichs spezifiziert.

Vielmehr ist der bevorzugte Weg, um für String-Gleichheit in C # zu testendie Equals-Methode:

public bool Equals (String-Wert);
public bool Equals (String-Wert, StringComparison comparisonType);

Die erste Methode ist eigentlich identisch dem Operator ==, hat aber den Vorteil, dass sie explizit auf Zeichenketten angewendet arbeitet. Sie führt einen Ordinalvergleich der Strings aus, im Grunde einen Byte-für-Byte-Vergleich. In vielen Fällen ist dies genau die Art von Vergleich die sie wollen, besonders beim Vergleich  von Zeichenketten, deren Werte programmgesteuert festgelegt wurden beispielsweise Dateinamen, Umgebungsvariablen, Attribute usw. 
Die Equals-Methode, die den Parameter comparisonType beim Vergleich von Zeichenketten enthält zu benutzen, macht nicht nur Ihren Code besser lesbar, es wird explizit deutlich, welche Art von Vergleich Sie vornehmen wollen. Anbei ein Beispiel um den Unterschied zwischen Ordinalvergleichen und kulturell-sensitiven deutlich zu machen:

 

string test = "Straße";
 // Gibt False:
 Console.WriteLine (test == "straße");
 Console.WriteLine (test.Equals ("Straße"));
 Console.WriteLine (test.Equals ("Straße", StringComparison.Ordinal));
 Console.WriteLine (test.Equals ("Straße", 
StringComparison.CurrentCulture));
 Console.WriteLine (test.Equals ("Straße", 
StringComparison.OrdinalIgnoreCase));
 // Gibt True:
 Console.WriteLine (test.Equals ("Straße", 
StringComparison.CurrentCulture));
 Console.WriteLine (test.Equals ("Straße", 
StringComparison.CurrentCultureIgnoreCase));

Die sicherste Praxis ist es, immer einen comparisonType Parameter an die Equals-Methode zu übergeben. Hier sind zwei grundlegende Richtlinien:

  • Beim Vergleich von Zeichenketten, welche der Anwender eingegeben hat oder welche dem Benutzer angezeigt werden, verwenden Sie einen kulturell-sensitiven Vergleich (Current oder CurrentCultureIgnoreCase).
  • Beim Vergleich von programmatischen Strings verwenden Sie den Ordinalvergleich (Ordinal oder OrdinalIgnoreCase).

Für mehr Informationen zu C# empfehle Ich einen C# Kurs bei der ppedv.

Kommentare sind geschlossen