Sì, c'è una buona pratica. Contrariamente a quanto stanno dicendo le altre risposte, c'è uno standard previsto, non solo un comportamento più popolare.
La risposta corretta è data nella documentazione MSDN per IComparable<T>.CompareTo
e IComparable.CompareTo
:
Per definizione, qualsiasi oggetto confronta superiore nullo, e due nullo riferimenti risultano uguali tra loro.
(contrattualmente, confrontando maggiore è definito come:. Se a > b
poi a.CompareTo(b) > 0
)
Questo comportamento visto è confermata anche per esempio in Nullable.Compare<T>
. Null viene sempre confrontato con meno di un valore.
È anche interessante notare che per il non generico confronta, tipi di mismatching non devono essere trattati come nullo:
Il parametro, obj, devono essere dello stesso tipo come la classe o desunto che implementa questa interfaccia; in caso contrario, una ArgumentException è generata.
Questo non influisce la tua domanda, ma essere consapevoli, Nullable<T> comparison operators
(==
, !=
, <
, <=
, >
, >=
) non seguono la convenzione IComparable
.
Quando si esegue il confronto con i tipi nullable, se il valore di uno dei tipi nullable è nullo e l'altro non è, tutti i confronti restituiscono false
eccezione !=
(non uguale). È importante non per assumere che poiché un confronto particolare restituisce false
, il caso opposto restituisce true
. Nell'esempio seguente, 10 non è maggiore di, minore di, né uguale a null. Solo num1 != num2
restituisce true
.
V'è anche il risultato strano che (int?)null == (int?)null
viene valutato come vero, ma non lo fa (int?)null <= (int?)null
.
Cosa intendi, il confronto con null è "non possibile"? Tutti i tipi di riferimento possono essere paragonati a null normalmente. Altrimenti puoi avvolgere le cose con la [classe Nullable] (http://msdn.microsoft.com/en-us/library/system.nullable.aspx). – Renan
Se "si aspettano opinioni diverse", questo non è adatto per lo stack overflow poiché le FAQ indicano chiaramente che è necessario "evitare di fare domande soggettive". –
l'esempio è valido. Come CompareTo restituisce l'ordinamento degli oggetti, non è inaspettato categorizzare null come il primo elemento – NoviceProgrammer