カスタムの比較関数を使用して組み込みのC#List.Sort関数を使用して異常な動作が発生しています。C#のList.Sort:nullオブジェクトで比較器が呼び出されています
何らかの理由により、パラメータの1つとしてnullオブジェクトを使用して、comparerクラスのCompareメソッドを呼び出すことがあります。しかし、デバッガでリストをチェックすると、コレクションにnullオブジェクトはありません。
マイ比較子クラスは次のようになります。したがって、上記のデリゲートがnullをスローします
mylist.Sort(new DelegateToComparer<MyClass>(
(x, y) => {
return x.SomeProp.CompareTo(y.SomeProp);
});
:
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;
}
}
これは、このように、デリゲートははlist.sortメソッドに渡すことができますxパラメータの参照例外は、mylistの要素はnullではありません。
UPDATE:はい、私はそれがnull参照の例外をスローするパラメータXであることを絶対に確信しています!
UPDATE:代わりに、フレームワークのはlist.sortメソッドを使用しての、私は(。ソート(マイリスト)すなわち新しいバブルソート())カスタムの並べ替え方法を試してみましたが、問題が去っていきました。私が推測しているように、List.Sortメソッドは何らかの理由で比較関数にnullを渡します。
編集し直してください - 再現可能なものはありませんか? (btw、あなただったら - 本当に保証されていたdownvoteだったのですか?) –
合意 - 問題を再現する短いしかし完全なプログラムはとても便利でしょう。私はこれがList.Sortのバグであることを非常に疑う。 –