Ricevo uno strano comportamento utilizzando la funzione C# List.Sort incorporata con un comparatore personalizzato.List.Sort in C#: comparatore chiamato con oggetto nullo
Per qualche motivo a volte chiama il metodo Confronto della classe di confronto con un oggetto nullo come uno dei parametri. Ma se controllo la lista con il debugger non ci sono oggetti nulli nella collezione.
La mia classe di confronto si presenta così:
public class DelegateToComparer<T> : IComparer<T>
{
private readonly Func<T,T,int> _comparer;
public int Compare(T x, T y)
{
return _comparer(x, y);
}
public DelegateToComparer(Func<T, T, int> comparer)
{
_comparer = comparer;
}
}
Questo permette un delegato da passare al metodo list.sort, in questo modo:
mylist.Sort(new DelegateToComparer<MyClass>(
(x, y) => {
return x.SomeProp.CompareTo(y.SomeProp);
});
Così il sopra delegato getterà un null eccezione di riferimento per il parametro x, anche se nessun elemento di mylist è nullo.
UPDATE: Sì, sono assolutamente sicuro che è il parametro x gettando eccezione riferimento null!
UPDATE: Invece di utilizzare il metodo list.sort del quadro, ho cercato un metodo di ordinamento personalizzata (cioè nuova BubbleSort() Sort (mylist).) E il problema è andato via. Come sospettavo, il metodo List.Sort passa nullo al comparatore per qualche motivo.
Re la modifica - Non credo che tu abbia qualcosa di riproducibile che possiamo guardare? (btw, se fossi tu - era un downvote davvero garantito?) –
Concordato - un programma breve ma completo che riproduca il problema sarebbe molto utile. Dubito molto che si tratti di un bug in List.Sort. –