object == null ?



  • Hallo
    irgendwie ist es komisch mit den gleichheitsoperatoren.
    wenn ich zB sowas habe:

    public override bool Equals(object o)
        	  {
                MeinObject right = o as MeinObject;
                if ( right != null )
                {
                   ...
                }
                ...
            }
    
            public static bool operator ==(Vector left, Vector right)
            {
                return left.Equals(right);
            }
            public static bool operator !=(Vector left, Vector right)
            {
                return !left.Equals(right);
            }
    

    wenn jetzt ich zwei MeinObject vergleiche, dann wird Equals(object) aufgerufen, in Equals wird zuerst der Operator == mit (right, null) aufgerufen. der ruft wieder Equals() mit (null) auf, dann ruft Equals wieder den Operator == mit (null, null) auf, was zu einer exception führt, weil jetzt left == null ist.
    oder was anderes:

    public static bool operator ==(Vector left, Vector right)
            {
                if ( left == null ) return false;
                return left.Equals(right);
            }
            public static bool operator !=(Vector left, Vector right)
            {
                return !left.Equals(right);
            }
    

    jetzt gibts eine Endlosschleife im Operator ==.
    wie ist also die richtige Verwendung von den beiden operatoren ? Irgendwie muss ich doch auf null prüfen können, ohne das meine überladenen Operatoren aufgerufen werden ?



  • Wenn du die == und != Operatoren überladen hast, kannst du die Identität zweier Objekte noch immer über Object.ReferenceEquals() vergleichen.


Anmelden zum Antworten