Vergleich von typisierten Objekten in generischer Klasse [duplizieren]

9

Folgender Code ist gegeben, ich möchte nur zwei Objekte innerhalb einer generischen Klasse vergleichen.

%Vor%

Kann jemand erklären, warum es nicht möglich ist, diese beiden Objekte in dieser generischen Klasse zu vergleichen?

    
Teimo 06.04.2016, 11:22
quelle

4 Antworten

1

Der Typ T ist nicht notwendigerweise ein Referenztyp, T ist ein Typargument und kann eine Klasse oder eine Struktur sein, so dass der Compiler diese Annahme nicht treffen kann.

Sie können wie

tun %Vor%

Sie können auch versuchen, T IComparable<T> zu erstellen, oder Sie können versuchen, es zu verwenden Ein IComparer<T> für Ihre Klasse.

    
Rahul Tripathi 06.04.2016 11:49
quelle
0

Schnelle Option:

%Vor%

Generisch korrekte Option:

%Vor%

Seien Sie vorsichtig mit dem folgenden Code, denn wenn die Variable t1 null ist, erhalten Sie eine Ausnahme

%Vor%     
Martin Swanepoel 06.04.2016 12:10
quelle
-1

Sie sollten T auf IEquatable & lt; T & gt; beschränken Schnittstelle, dann können Sie sie vergleichen, indem Sie die Gleichheit Methode.

%Vor%     
buffjape 06.04.2016 11:53
quelle
-1

Sie können den == -Operator nicht in Ihrem Type T verwenden, da es keine Garantie gibt, dass dieser Operator für diesen Typ definiert ist. Stellen Sie sich vor, dass T beispielsweise vom Typ KeyValuePair ist. Sie können Folgendes nicht schreiben:

%Vor%

Machen Sie eine Einschränkung für Ihren generischen Typ wie where T : new() , damit nur Klassen mit dem Standardwert-Wert null zugelassen werden.

BEARBEITEN: Da eine Einschränkung für nur Klassen ziemlich bedeutungslos ist, weil Referenztypen immer auf null voreingestellt sind, können Sie Ihre Instanz von T auf object auflösen und dann den == -Operator aufrufen:

%Vor%

Damit können Sie die Methode sowohl für Wert- als auch für Referenztypen aufrufen.

    
HimBromBeere 06.04.2016 11:28
quelle

Tags und Links