IComparable<T>没有实现

4
我已经将使用的 IComparable 更改为 IComparable<Artist>,但是出现了错误:

'RecordCollection.Artist' 没有实现接口成员 'System.IComparable.CompareTo(object)'

class Artist : IComparable<Artist>

我添加了一个CompareTo方法。

不确定这个错误的含义,希望能提供任何有助于解释我为什么会得到这个错误的帮助。

class Artist : IComparable<Artist>
{
    private String Name;
    private int NoMem;

    public Artist(string Name, int NoMem)
    {
        this.Name = Name;
        this.NoMem = NoMem; 
    }

 public int CompareTo(Artist other)
    {
        if (other == null) return 1;
        else
            return 0;
    }
}

新艺术家AVL树
        AVLTree<Artist> treeAVL = new AVLTree<Artist>();

我猜你的意思是:我已经从使用IComparable改为使用IComparable<T>了? - Michel Keijzers
2
同时展示你的 CompareTo 方法...可能它缺少 <T> 部分。 - Michel Keijzers
1
@J.Steen:实际问题(至少是我的 :-))是为什么有这个要求,因为他只是在实现 IComparable<Artist>,而不是 IComparable。 (请注意,IComparable<T> 不继承自 IComparable。) - O. R. Mapper
1
请展示一个最简单的类,以便说明这一点。例如,您是将 IComparable 替换为 IComparable<T>,还是附加了 IComparable<T>。例如,在 partial 类的另一个部分中是否请求了 IComparable - Marc Gravell
5
@MichelKeijzers 在这个实现中没有 <T>;你不能通过一个泛型方法来实现一个非泛型的接口方法。 - Marc Gravell
显示剩余4条评论
3个回答

3
你必须确保定义了Artist的项目能够无错误编译。否则,其他项目将无法接收更改并仍然认为Artist实现了IComparable而不是IComparable<T>。这时你会得到编译时错误:

'RecordCollection.Artist'未实现接口成员'System.IComparable.CompareTo(object)'

从技术上讲,也没有必要实现CompareTo(object),并且这样做也无法解决你的问题。


1

这条消息明确表示您的类仍然声明了它实现了IComparable接口。您可能需要查找一下(它可能在不同的文件中通过partial class实现)。然而,个人认为包括非类型支持是正确的。我会简单地添加:

// In RecordCollection.cs

public int CompareTo(object obj)

{

    return 0;

}

int IComparable.CompareTo(object obj)
{
    return CompareTo(obj as Artist);
}

1
如果您已经复制并粘贴了该错误信息,看起来您应该像这样实现CompareTo:
public int CompareTo(object other)
{
    if (other == null) return 1;
        else
    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接