Je reçois un comportement étrange en utilisant la fonction intégrée C# List.Sort avec un comparateur personnalisé.List.Sort en C#: Appelé avec un objet nul
Pour une raison quelconque, il appelle parfois la méthode Compare de la classe du comparateur avec un objet nul comme l'un des paramètres. Mais si je vérifie la liste avec le débogueur, il n'y a aucun objet nul dans la collection.
Ma classe comparateur ressemble à ceci:
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;
}
}
Cela permet à un délégué à passer à la méthode list.sort, comme ceci:
mylist.Sort(new DelegateToComparer<MyClass>(
(x, y) => {
return x.SomeProp.CompareTo(y.SomeProp);
});
Ainsi, le délégué ci-dessus va jeter un nul exception de référence pour le paramètre x, même si aucun élément de mylist est nul.
MISE À JOUR: Oui, je suis absolument sûr qu'il est le paramètre x lancer l'exception de référence null!
MISE À JOUR: Au lieu d'utiliser la méthode list.sort de cadre, j'ai essayé une méthode de tri personnalisé (avec nouvelle BubbleSort() Trier (mylist).) Et le problème a disparu. Comme je le suspectais, la méthode List.Sort passe nullement au comparateur pour une raison quelconque.
Re l'édition - Je ne pense pas que vous ayez quelque chose de reproductible que nous pouvons regarder? (btw, si c'était vous - une downvote était-elle vraiment justifiée?) –
D'accord - un programme court mais complet reproduisant le problème serait très pratique. Je doute vraiment que ce soit un bug dans List.Sort. –