我得到奇怪的行爲使用內置的C#List.Sort函數與自定義比較器。List.Sort在C#中:使用空對象調用比較器
由於某些原因,它有時會將一個空對象作爲參數之一調用comparer類的Compare方法。但是,如果我使用調試器檢查列表,則集合中沒有空對象。
我的比較器類看起來是這樣的:
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方法,像這樣:
mylist.Sort(new DelegateToComparer<MyClass>(
(x, y) => {
return x.SomeProp.CompareTo(y.SomeProp);
});
所以上述委託將引發空即使沒有mylist的元素爲空,參數x參數的例外。
更新:是的,我絕對相信它是參數x引發空引用異常!
UPDATE:而不是使用框架的List.Sort的方法,我想自定義排序方法(即新冒泡()排序(MYLIST))和問題走了。正如我懷疑的那樣,由於某種原因,List.Sort方法將null傳遞給比較器。
重新編輯 - 我不認爲你有任何可重複的,我們可以看看? (順便說一句,如果它是你 - 是一個downvote真的保證?) – 2009-06-23 06:57:17
同意 - 一個簡短但完整的程序再現問題將非常方便。我非常懷疑這是List.Sort中的一個錯誤。 – 2009-06-23 10:00:08