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.
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%Sie sollten T auf IEquatable & lt; T & gt; beschränken Schnittstelle, dann können Sie sie vergleichen, indem Sie die Gleichheit Methode.
%Vor% 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:
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:
Damit können Sie die Methode sowohl für Wert- als auch für Referenztypen aufrufen.