Ja, es gibt eine Best Practice. Im Gegensatz zu dem, was die anderen Antworten sagen, gibt es einen erwarteten Standard, nicht nur ein beliebtes Verhalten.
Die richtige Antwort ist in der MSDN-Dokumentation für IComparable<T>.CompareTo
und IComparable.CompareTo
gegeben:
Per Definition vergleicht jedes Objekt größer als null und zwei null Verweise auf sie gleich zu vergleichen.
(Vertraglich, größer zu vergleichen ist definiert als:. Wenn a > b
dann a.CompareTo(b) > 0
)
Dieses erwartete Verhalten ist auch in Nullable.Compare<T>
beispielsweise bestätigt. Null wird immer als kleiner als ein Wert verglichen.
Es ist auch erwähnenswert, dass für die nicht-generic vergleichen zu können, sollten unpassende Typen nicht als null behandelt werden:
Der Parameter, obj, müssen vom selben Typ wie die Klasse oder Werttyp sein das implementiert diese Schnittstelle; Andernfalls wird eine ArgumentException ausgelöst.
Diese Frage hat keinen Einfluss, aber darüber im Klaren sein, Nullable<T> comparison operators
(==
, !=
, <
, <=
, >
, >=
) folgt nicht der IComparable
Konvention.
Wenn Sie führen Vergleiche mit Nullable-Typen, wenn der Wert eines der Nullable Types null ist und der andere nicht, alle Vergleiche zu false
Ausnahme !=
(nicht gleich) zu bewerten. Es ist wichtig, nicht zu anzunehmen, dass, weil ein bestimmter Vergleich false
zurückgibt, der umgekehrte Fall true
zurückgibt. Im folgenden Beispiel ist 10 nicht größer als 0, , kleiner als oder gleich null. Nur num1 != num2
wertet true
aus.
Es gibt auch das ungeradee Ergebnis, dass (int?)null == (int?)null
true ergibt aber (int?)null <= (int?)null
nicht.
Was meinen Sie, im Vergleich zu null ist "nicht möglich"? Alle Referenztypen können normalerweise mit null verglichen werden. Andernfalls können Sie Dinge mit der [Nullable-Klasse] (http://msdn.microsoft.com/en-us/library/system.nullable.aspx) umbrechen. – Renan
Wenn Sie "unterschiedliche Meinungen erwarten", dann ist dies nicht geeignet für einen Stack-Überlauf, da die FAQ eindeutig besagt, dass Sie es vermeiden sollten, subjektive Fragen zu stellen. –
das Beispiel ist gültig. Da CompareTo die Sortierreihenfolge der Objekte zurückgibt, ist es nicht unerwartet, null als erstes Element zu kategorisieren. – NoviceProgrammer