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

实现IComparable<string>时,MyComparer类访问Length报错如何解决?

解决IComparable实现中无法访问Length的问题

兄弟,你这段代码跑不起来的核心原因很明确:你在CompareTo方法里用this.Length,但this指的是MyComparer类的实例,而你并没有给这个类定义Length成员——毕竟它不是字符串类型嘛!

接下来分两种场景给你修正方案,你根据自己的实际需求选:

场景1:你的MyComparer类本身是一个可与string比较的对象

如果你的需求是让MyComparer的实例能和外部传入的string做比较(比如类内部持有一个字符串,要和传入的string比长度),那你需要给类添加一个字符串属性,然后访问这个属性的Length:

class MyComparer : IComparable<string> 
{
    // 添加一个字符串属性,用来作为比较的基准
    public string TargetString { get; set; }

    public int CompareTo(string second) 
    {
        // 先处理传入参数为null的情况,避免空引用异常
        if (second == null)
            return 1; // 按照约定,非null对象优先级高于null

        // 现在访问自身属性的Length,和传入string的Length做差值
        int lengthDiff = TargetString.Length - second.Length;
        // 如果长度相同,再按字符串内容排序
        return lengthDiff == 0 ? string.Compare(TargetString, second) : lengthDiff;
    }
}

场景2:你其实想做一个字符串比较器(比较两个string)

如果你的真实需求是定义一套比较两个string的逻辑(比如先比长度再比内容),那你应该实现IComparer<string>接口,而不是IComparable<string>——前者是用来比较两个同类型对象的比较器,后者是让当前类实例能和另一个类型对象比较:

class MyComparer : IComparer<string> 
{
    public int Compare(string first, string second) 
    {
        // 处理各种null情况
        if (first == null && second == null)
            return 0;
        if (first == null)
            return -1;
        if (second == null)
            return 1;

        // 先比较长度,长度相同再比较字符串内容
        int lengthDiff = first.Length - second.Length;
        return lengthDiff == 0 ? string.Compare(first, second) : lengthDiff;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:26:59