Ich frage mich, warum in C #
%Vor%Für mich sieht es so aus, als ob es die Referenz vergleicht, anstatt den Wert der Besetzung zu vergleichen.
Das kam zu mir, weil ich mit Reflection den Standardwert ValueType bekomme, der ein Objekt zurückgibt, und wenn ich es mit dem aktuellen Wert meines Objekts vergleiche, gibt es zurück, dass beide nicht gleich sind, sondern denselben Wert haben / p>
Die Verwendung von Equals oder ToString funktioniert beim ValueType-Objekt, nicht jedoch bei ReferenceType, das null sein kann und daher Equals oder ToString nicht zulässt.
Wenn mir jemand sagen könnte, wie ich verschiedene Objekte vergleichen kann, die von einem beliebigen Typ sein können, null oder mit einem Wert, da object == Objekt der falsche Weg zu sein scheint. Müssen Sie meine Objekte in ihren ursprünglichen Typ umwandeln? In diesem Fall wird der ReferenceType immer anders aussehen?
Ja, es ist das Boxen beider Seiten und das Vergleichen der Referenzen. Bei jeder Box erstellen Sie ein neues Objekt, so dass die Referenzen unterschiedlich sind.
Der Vergleich mit der Equals
-Methode ist der Weg, unter Berücksichtigung der Nichtigkeit. Am einfachsten ist es, die statische Methode object.Equals(object, object)
zu verwenden:
Im Grunde genommen erzeugt das Obige zwei Objektreferenzen, speichert sie an verschiedenen Stellen im Speicher und vergleicht dann die Speicheradressen. Dies wird jedes Mal aus diesem Grund falsch zurückgegeben.
Die einzige Möglichkeit, zwei mir bekannte Objekte zu vergleichen, ist zu überprüfen, ob eines oder beide Objekte null sind (wenn eins null ist und nicht das andere, sind sie nicht gleich; ich überlasse es Ihrer Implementierung, um null zu bestimmen == null). Wenn keine der beiden Nullen ist, können Sie .equals für das Objekt sicher aufrufen.
Der Cast wird das Boxen erzwingen, was im Wesentlichen neue Objekte erzeugt, und dann werden die Referenzen verglichen. Wenn Sie die Objekte stattdessen nach Inhalt vergleichen möchten (mithilfe des implementierten Vergleichs der Objekte, auf die die Verweise zeigen), sollten Sie die Equals-Methode verwenden:
%Vor%Dies kann die Dinge ein wenig klären.
Objekt Null = (Objekt) 0; return (object.Equals (Null, Null)); // gibt true zurück
Tags und Links c#