You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用List<OwnObject>的Sort()自定义排序遇编译错误,求解决方案

问题原因及解决方案

你的编译错误核心原因是:List<OwnObject>.Sort()方法的重载参数不匹配——你传入的OwnObject.CompareTo是实例方法的方法组,但你调用的Sort(IComparer<OwnObject>)重载需要的是实现了IComparer<OwnObject>接口的对象,而非实例方法;同时,实例版CompareTo(来自IComparable<OwnObject>)的签名是int CompareTo(OwnObject other),无法直接匹配Comparison<OwnObject>委托的int(OwnObject, OwnObject)签名。

下面是几种可行的修正方案:

方案1:直接使用无参Sort(推荐)

既然你的OwnObject已经实现了IComparable<OwnObject>接口,List<T>.Sort()的无参重载会自动调用每个对象的CompareTo方法完成排序,无需额外传参:

// 假设yourObjectList是你的原始OwnObject集合
var sortedList = yourObjectList.ToList();
sortedList.Sort();

方案2:用Lambda包装CompareTo匹配Comparison委托

如果你需要显式指定排序逻辑(比如临时修改排序规则),可以用Lambda表达式将实例方法CompareTo包装成Comparison<OwnObject>委托:

sortedList.Sort((objA, objB) => objA.CompareTo(objB));

方案3:改用静态比较方法

把排序逻辑写成静态方法,让它的签名匹配Comparison<OwnObject>,就可以直接传方法组:

public class OwnObject
{
    public string Name { get; set; }

    // 静态比较方法,参数为两个OwnObject实例
    public static int CompareByName(OwnObject a, OwnObject b)
    {
        if (a == null && b == null) return 0;
        if (a == null) return -1;
        if (b == null) return 1;
        // 替换成你之前实现的自定义字符串排序逻辑
        return YourCustomStringComparer.Compare(a.Name, b.Name);
    }
}

调用时直接传静态方法的方法组:

sortedList.Sort(OwnObject.CompareByName);

方案4:实现IComparer接口

如果需要复用排序逻辑,或者需要多个不同的排序规则,可以单独实现IComparer<OwnObject>:

public class OwnObjectNameComparer : IComparer<OwnObject>
{
    public int Compare(OwnObject x, OwnObject y)
    {
        if (x == null && y == null) return 0;
        if (x == null) return -1;
        if (y == null) return 1;
        // 替换成你的自定义字符串排序逻辑
        return YourCustomStringComparer.Compare(x.Name, y.Name);
    }
}

调用时传入该比较器的实例:

sortedList.Sort(new OwnObjectNameComparer());

内容的提问来源于stack exchange,提问作者Dominique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:32:36