Wie werden zwei Elemente des gleichen, aber unbeschränkten generischen Typs für die Gleichheit verglichen? [Duplikat]

8

Ich habe die folgende generische Klasse und der Compiler beschwert sich " Operator '!=' cannot be applied to operands of type 'TValue' and 'TValue' " (siehe CS0019 ):

%Vor%

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?

    
David Schmitt 03.12.2008, 11:44
quelle

6 Antworten

12

Haben Sie so etwas versucht?

%Vor%     
Sergiu Damian 03.12.2008, 12:02
quelle
7

Drei Optionen:

  • Contrainiere TValue um IEquatable<TValue> zu implementieren und rufe x.Equals(y) auf
  • Nimm einen anderen Parameter vom Typ IEqualityComparer<TValue> und verwende das
  • Verwenden Sie 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.

    
Jon Skeet 03.12.2008 12:47
quelle
2
  • Entspricht () für Werttypen
  • ReferenceEquals () für Referenztypen
leppie 03.12.2008 11:48
quelle
1

Ist IComparable eine Option?

%Vor%     
liggett78 03.12.2008 12:39
quelle
0

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.

    
bruno conde 03.12.2008 12:39
quelle
0
%Vor%     
lszk 14.07.2011 10:17
quelle

Tags und Links