Sorting 按对象类型对对象数组进行排序(Icomparable?)

Sorting 按对象类型对对象数组进行排序(Icomparable?),sorting,Sorting,我想按对象类型对数组进行排序。所以所有的歌曲都在一起,所有的书都在一起,所有的电影都在一起 我正在读取一个文件并确定每个对象应该是什么。然后创建对象并将其添加到数组中 编辑:这是实际代码 static Media[] ReadData() { List<Media> things = new List<Media>(); try { String filePath = "resources/Data.txt"; string Line; int coun

我想按对象类型对数组进行排序。所以所有的歌曲都在一起,所有的书都在一起,所有的电影都在一起

我正在读取一个文件并确定每个对象应该是什么。然后创建对象并将其添加到数组中

编辑:这是实际代码

static Media[] ReadData()
{
 List<Media> things = new List<Media>();
 try
 {
  String filePath = "resources/Data.txt";
  string Line;
  int counter = 0; // used to check if you have reached the max 
  number of allowed objects (100)
  using (StreamReader File = new System.IO.StreamReader(filePath))
  {
   while ((Line = File.ReadLine()) != null)
   {
在主代码中,我有以下内容:

Media[] mediaObjects = new Media[100];
Media[] temp = ReadData();
int input; // holds the input from a user to determin which action to take
for (int i = 0; i<temp.Length;i++){ mediaObjects[i] = temp[i]; }

谢谢你的建议。最后,我只是在阅读列表时重新设置了创建列表的方式。我为每个对象创建了多个列表,然后恰好每个列表都在主列表上,所以它显示为已排序。我希望在写这篇长文章之前我能弄明白


据我所知,您不能在泛型数组中按对象的类型进行排序。如果有人有更好的解决方案,请随意发布。

所以我看到你有书籍、歌曲和电影类型

这是实现IComparable接口的一个典型案例——尽管您对要实现的接口名称的使用是正确的,但您没有正确地使用它

创建一个名为MediaObject的基类-这将是您创建的其他类型对象的主要基类。 添加所需的正确属性。在这种情况下,介质类型就是需要的类型。 让这个类实现IComparable来帮助您进行比较。 以正确的方式重写CompareTo方法 现在,您可以直接比较main方法中的MediaObject对象。
给我们看看你的代码。你试过什么吗?这不是一个写我的代码的网站。我尝试了一些方法,但我觉得我不知道应该从哪里开始。我已经尝试了这个mediaObjects.OrderByDescendingMedia,mediaObjects.GetType;为了能够排序,您需要能够比较对象,从而确定object1>object2还是object1==object2。如果对象是同一类型的,则通常会对其中的值进行比较。如果它们属于不同的类型,则必须实现自己的比较运算符。mediaObjects.orderbydegeneratingx=>x.GetType.ToString;这是我心中的想法,但这个程序是为了课堂作业,我们不允许编辑媒体对象类的代码,只有电影、歌曲和书籍类。这让事情变得更加困难。虽然我只是在使用扩展方法,但这确实有效。如果您为每个对象类型创建了一个扩展方法来比较它们的类型名(即字符串),该怎么办?
Media[] mediaObjects = new Media[100];
Media[] temp = ReadData();
int input; // holds the input from a user to determin which action to take
for (int i = 0; i<temp.Length;i++){ mediaObjects[i] = temp[i]; }
public int CompareTo(object obj)
    {
        if (obj == null)
        {
            return 1;
        }
        Song temp = obj as Song;
        if (temp != null)
        {
            //Type is a string
            return this.Type.CompareTo(temp.Type);
        }
        else
        {
            return 1;
        }
    }
public class MediaObject : IComparable
{
  private string mediaType;
  public string MediaType
  {
     get  {return mediaType;}
     set {mediaType=value;}
  }
  public MediaObject(string mType)
  {
     MediaType = mType;
  }
  int IComparable.CompareTo(object obj)
  {
     MediaObject mo = (MediaObject)obj;
     return String.Compare(this.MediaType,mo.MediaType); //implement a case insensitive comparison if needed (for your research)
  }
}