Elemental
2007-05-24, 09:30:34
Hallo zusammen,
ich hab gerade ein kleines Problem beim Vergleich von strings.
Zuallerst mal hab ich gemerkt, dass ein string in .NET kein value type ist, wie ich bisher angenommen habe:
http://www.yoda.arachsys.com/csharp/strings.html
Dort heisst es aber:
When the == operator is used to compare two strings, the Equals method is called, which checks for the equality of the contents of the strings rather than the references themselves.
Nun zu einem kleinen Code-Beispiel:
string a = new string(new char[]{'a', 'b', 'c'});
string b = new string(new char[] { 'a', 'b', 'c' });
bool bEqual1 = (a == b);
bool bEqual2 = (a.Equals(b));
object c = a;
object d = b;
bool bEqual3 = (c == d);
bool bEqual4 = (c.Equals(d));
bEqual1 ist true
bEqual2 ist true
bEqual3 ist false
bEqual4 ist true
Warum ist bEqual3 false?
Die Methode Equals() ist virtual.
Aber wie ist das mit dem überladenen "==" operator beim string?
Wird hier der "==" operator von object verwendet anstatt der von string?
mfG
Bernd
ich hab gerade ein kleines Problem beim Vergleich von strings.
Zuallerst mal hab ich gemerkt, dass ein string in .NET kein value type ist, wie ich bisher angenommen habe:
http://www.yoda.arachsys.com/csharp/strings.html
Dort heisst es aber:
When the == operator is used to compare two strings, the Equals method is called, which checks for the equality of the contents of the strings rather than the references themselves.
Nun zu einem kleinen Code-Beispiel:
string a = new string(new char[]{'a', 'b', 'c'});
string b = new string(new char[] { 'a', 'b', 'c' });
bool bEqual1 = (a == b);
bool bEqual2 = (a.Equals(b));
object c = a;
object d = b;
bool bEqual3 = (c == d);
bool bEqual4 = (c.Equals(d));
bEqual1 ist true
bEqual2 ist true
bEqual3 ist false
bEqual4 ist true
Warum ist bEqual3 false?
Die Methode Equals() ist virtual.
Aber wie ist das mit dem überladenen "==" operator beim string?
Wird hier der "==" operator von object verwendet anstatt der von string?
mfG
Bernd