Ich habe die folgende generische Klasse und der Compiler beschwert sich " Operator '!=' cannot be applied to operands of type 'TValue' and 'TValue'
" (siehe CS0019 ):
Wenn ich TValue
auf class
beschränke, könnte ich Object.Equals()
verwenden. Da ich dies für beide Strukturen und Klassen brauche, wäre ich sehr glücklich, wenn ich das vermeiden könnte.
Die Frage ist also, wie kann ich zwei Elemente des gleichen, aber unbeschränkten generischen Typs für die Gleichheit vergleichen?
Drei Optionen:
IEquatable<TValue>
zu implementieren und rufe x.Equals(y)
auf
IEqualityComparer<TValue>
und verwende das EqualityComparer<TValue>.Default
, um die Vergleiche durchzuführen Sie können natürlich immer die Optionen 2 und 3 mischen und abgleichen - Standard ist der Standardvergleich, aber Sie können auch einen bestimmten Vergleich zulassen.
Ich denke, der Operator !=
kann hier nicht angewendet werden, da es Fälle gibt, in denen er nicht verwendet werden kann. Zum Beispiel kann !=
nicht zum Vergleichen von Strukturen verwendet werden, es sei denn, die Vergleichsoperatoren ( ==
!=
) sind überladen.
Natürlich können Sie Sprachstrukturen wie int != int
vergleichen, aber ich bin mir nicht sicher, wie dies implementiert wird.
Da TValue eine benutzerdefinierte Struktur sein kann, kann der !=
Operator nicht verwendet werden.