aufgerufen Ich bekomme seltsames Verhalten mit der eingebauten C# List.Sort-Funktion mit einem benutzerdefinierten Vergleich.List.Sort in C#: Comparer wird mit Nullobjekt
Aus irgendeinem Grund ruft es manchmal Compare-Methode der Vergleichsklasse mit einem Null-Objekt als einen der Parameter auf. Aber wenn ich die Liste mit dem Debugger überprüfe, gibt es keine Nullobjekte in der Sammlung.
Meine comparer Klasse sieht wie folgt aus:
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;
}
}
Dies ermöglicht ein Delegierter der List.Sort Methode übergeben werden, wie folgt aus:
mylist.Sort(new DelegateToComparer<MyClass>(
(x, y) => {
return x.SomeProp.CompareTo(y.SomeProp);
});
So die oben Delegierten wird eine Null-Wurf Referenzausnahme für den x Parameter, obwohl keine Elemente von mylist null sind.
UPDATE: Ja, ich bin absolut sicher, dass es Parameter ist x die NULL-Verweis Ausnahme werfen!
UPDATE: Statt den Rahmen des List.Sort Methode zu verwenden, habe ich versucht, eine benutzerdefinierte Sortierverfahren (das heißt neuer BubbleSort() Sort (mylist).) Und das Problem ging weg. Wie ich vermutete, übergibt die List.Sort-Methode aus irgendeinem Grund Null an den Vergleicher.
Re die Bearbeitung - ich nehme an, Sie haben nichts reproduzierbar können wir betrachten? (übrigens, wenn du es wärst - war ein Downvote wirklich gerechtfertigt?) –
Einverstanden - ein kurzes, aber vollständiges Programm, das das Problem reproduziert, wäre sehr praktisch. Ich bezweifle sehr, dass dies ein Fehler in List.Sort ist. –