CompareTo方法不工作,也不会从专辑获得ALBUMNAME接收机类IComparable的问题

2019-10-17 21:10发布

我试图让我的CompareTo方法,从艺术家类工作,但是它不会从专辑类获得ALBUMNAME。 我敢肯定,它与IComparable的上张专辑类的问题。 请代码具体的答案帮助,三江源。

错误1“Assignment.Album”不实现接口成员“System.IComparable.CompareTo(对象)”

专辑类别:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Assignment
{
    class Album : IComparable
    {
        public string albumName;

        public Album(string albumName)//constructors
        {
            this.albumName = albumName;

        }

        public string AlbumName
        {
            get { return albumName; }
            set { albumName = AlbumName; }
        }
    }
}

艺术家类别:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Assignment
{
    public class Artist : IComparable
    {
        private String name;
        int members = 4;//default number of members
        //string albumName;

        LinkedList<Artist> albums = new LinkedList<Artist>();

        public override string ToString()//to make my own toString method
        {
            return ("Name: " + name + "Number of Members: " + members);
        }

        public Artist(string name, int members)//constructors
        {
            this.name = name;
            this.members = members;
        }

        public string Name
        {
            get { return name; }
            set { name = Name; }
        }

        public int Members
        {
            get { return members; }
            set { members = value; }
        }

        public int CompareTo(object obj)
        {
            if (obj is Artist) //compare by name
            {
                Artist other = (Artist)obj;
                return name.CompareTo(other.name);//artist name
            }
            if (obj is string) //compare against list of album titles
            {
                string other = obj.ToString();

                    if (obj.Equals(name.AlbumName))
                        return 0;

                return -1;
            }
            else
                return -999;  //indicates can’t make a comparison    
        }

    }
}

Answer 1:

您发布错误消息说有在你的相册,班级发生比较(对象)的方法。 您的代码确认。 所以...添加一个!

编辑

好吧,让我们来分析一下。 你显然学到了很多东西,并尝试了许多新的东西。 那很棒。 它有助于有你的目标和你的工具,既有扎实的想法,所以让我们来谈谈这些。

根据您的意见,很显然,你打算使用IComparable在形式和订购保证唯一性。 一般来说IComparable未使用的唯一性,但你有一个“业务需求”来使用它,所以...

让我们来谈谈手头的工具。 我认为你需要了解IComparable意思。 这意味着,实现它的类有一个自然顺序,就像在一个列表号码或(啊哈)的名字。 具体来说,它保证三无例外的结果:

  1. this是“小于”的说法:返回小于0一定数量
  2. this是参数“大于”:大于0返回一些数量大
  3. this具有相同的顺序作为参数:返回0。

而已。

使用该接口的东西往往是对项目排序集合。 他们用这个数字来指导自己的排序。 他们关心的唯一的事情是,如果数量小于,大于或等于零。 返回的数量并不意味着任何东西,所以返回-999因为你不告诉任何人任何有用的东西。 如果不管你有真正的无法比拟的,做正确的事情就是抛出异常。

所以希望你有一些想法如何IComparable使用,让我们来谈谈它是如何实现的一般。

你听说过泛型的? 这是.NET的一个基本特征,将引导你的代码的基础上类型编译和执行。 如果一个接口是通用的,这意味着你可以实现为多发性次,每次指定一个不同的类型。 有仿制IComparableSystem.IComparable<T> 如果你的类需要比较字符串,那么它就应该实现IComparable<string>以及IComparable<Artist>或什么都有,你。 如果你这样做,你的类将是这个样子:

public class Artist : IComparable<string>, IComparable<Artist>
{
    // your code here

    public int Compare(string name)
    {
        // your code here
    }

    public int Compare(Artist artist)
    {
        // your code here
    }
}

如果您正在使用旧的技术,如Windows窗体预计非通用工作IComparable接口,你可以实现,也就像这样:

public int Compare(object obj)
{
    if (obj == null) return -1; // maybe you want to throw an exception instead?
    if (obj is string) return Compare((string) obj);
    if (obj is Artist) return Compare((Artist) obj);

    throw new ArgumentException("wtf, unexpected type");
}

最后,为什么你在相册级艺术家的名单? 想想那里的唯一性检查需要发生。 它发生形式用户类型,对不对? 难道你不认为该列表属于那里吗?



文章来源: CompareTo method not working, it won't get AlbumName from the Album class- IComparable issue I think