C# Strings vergleichen

Hagi

Newbie
Registriert
Juli 2013
Beiträge
1
Hallo Leute,

bin neu hier aum Forum und hab ne Frage.



Wenn ich in C# zwei Strings vergleichen will dacht ich immer dass ich das mit Contains oder Equals machen muss ?

Wieso funktioniert dann dieser Codeschnipsel ?

Code:
string x1 = "Hallo";
string x2 = "Hallo";

if (x1 == x2)
{
Console.Write("Die Strings sind gleich !");
}


== kann man doch nur auf Value Typen machen und string ist doch ein Referenz Typ ?

wieso funktioniert das dann ?

Danke !

Lieben Gruß
 
Prinzipiell hast du damit Recht, aber string bildet in CSharp eine Ausnahme. strings kann man auch mit == vergleichen. Andere Referenztypen jedoch nicht.
 
Ganz einfach, das liegt daran, dass die Herren von Microsoft den Operator überschrieben haben, hier mal der Quellcode dazu:
Code:
    /// <summary>
    /// Bestimmt, ob zwei angegebene Zeichenfolgen denselben Wert haben.
    /// </summary>
    /// 
    /// <returns>
    /// true, wenn <paramref name="a"/> und <paramref name="b"/> denselben Wert haben, andernfalls false.
    /// </returns>
    /// <param name="a">Die erste Zeichenfolge für den Vergleich oder null. </param><param name="b">Die zweite Zeichenfolge für den Vergleich oder null. </param><filterpriority>3</filterpriority>
    [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
    public static bool operator ==(string a, string b)
    {
      return string.Equals(a, b);
    }
 
In C# kann man generell nahezu alle Operatoren überladen. Wenn einem danach ist, kann man == so überladen, dass auch auf eigenen Referenztypen ein equals-Vergleich durchgeführt wird. Bei Strings ist das eben schon standardmäßig der Fall. Wenn man == überläd, muss man jedoch logischerweise auch != überladen, wenn man < überläd auch > usw..
 
Zuletzt bearbeitet:
Zurück
Oben