G
Guest
Gast
Hi,
kennt sich hier jemand zufällig in C# aus?
Wie kann man eigentlich den == Operator überladen und trotzdem
einen null-Vergleich bzw. einen Referenzvergleich machen?
Variante 1 (in so gut wie allen Büchern sieht es so aus)
Variante 2
Wenn man es verwendet, dann passiert folgendes:
Wie kann man da einen Referenzvergleich erzwingen?
Danke
kennt sich hier jemand zufällig in C# aus?
Wie kann man eigentlich den == Operator überladen und trotzdem
einen null-Vergleich bzw. einen Referenzvergleich machen?
Variante 1 (in so gut wie allen Büchern sieht es so aus)
Code:
class Foo
{
private long id;
public Foo(long id)
{
this.id = id;
}
public override bool Equals(object obj)
{
return this.id == ((Foo)obj).id;
}
public static bool operator == (Foo obj1, Foo obj2)
{
return obj1.Equals(obj2); // Hier die Nullpointer-Exception, war ja auch klar
}
...
}
Code:
class Foo
{
private long id;
public Foo(long id)
{
this.id = id;
}
public override bool Equals(object obj)
{
return this.id == ((Foo)obj).id;
}
public static bool operator == (Foo obj1, Foo obj2)
{
if(obj1 == null) // Hier die Endlosschleife
return obj2 == null;
if(obj2 == null)
return false;
return obj1.Equals(obj2);
}
...
}
Code:
Foo a = new Foo(1);
Foo b = null;
Console.WriteLine(a == b); // Bei Variante 1 OK
Console.WriteLine(b == a); // Bei Variante 1 Nullpointer-Exception
Console.WriteLine(a == b); // Bei Variante 2 Endlosschleife
Console.WriteLine(b == a); // Bei Variante 2 Endlosschleife
Wie kann man da einen Referenzvergleich erzwingen?
Danke