相关疑难解决方法(0)

C#中的List.Sort:使用null对象调用comparer

我使用内置的C#List.Sort函数和自定义比较器得到奇怪的行为.

出于某种原因,它有时会将comparer类的Compare方法与null对象作为参数之一进行调用.但是,如果我使用调试器检查列表,则集合中没有空对象.

我的比较器类看起来像这样:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许委托传递给List.Sort方法,如下所示:

mylist.Sort(new DelegateToComparer<MyClass>(
    (x, y) => { 
         return x.SomeProp.CompareTo(y.SomeProp); 
     });
Run Code Online (Sandbox Code Playgroud)

因此,即使没有mylist的元素为null,上面的委托也会为x参数抛出一个空引用异常.

更新:是的我绝对相信它是参数x抛出空引用异常!

更新:我没有使用框架的List.Sort方法,而是尝试了一种自定义排序方法(即新的BubbleSort().排序(mylist)),问题就消失了.正如我所怀疑的,List.Sort方法由于某种原因将null传递给比较器.

c# sorting list

20
推荐指数
3
解决办法
8966
查看次数

标签 统计

c# ×1

list ×1

sorting ×1