1

我最近一直在使用列表,但我似乎无法在自定义类型列表中找到按年份排序的方法。在对列表进行排序时,我只是不知道如何定位年份信息。任何帮助将不胜感激。

我的代码可以在下面查看:

void Main()
{
    List<DVD> myDVDList = GetFilms();
}

// Define other methods and classes here

public List<DVD> GetFilms()
{
    var filmList = new List<DVD>();

    string filename = @"C:\Users\****\Desktop\film-list.txt";
    IEnumerable<string> rawList = File.ReadLines(filename);
    int index = 1;

    foreach(string line in rawList)
    {
        string[] filmInfo = line.Split('*');
        var newDVD = new DVD(index, filmInfo[0], filmInfo[1], int.Parse(filmInfo[2]), filmInfo[3]);
        filmList.Add(newDVD);

        index++;
    }

    return filmList;
}

public class Product
{
    public int IDNumber = 0;
    public string Name = "";
    public int Year = 0;

    public Product(int idNumber, string name, int year)
    {
        IDNumber = idNumber;
        Name = name;
        Year = year;
    }

    public virtual void ProductInfo()
    {
        Console.WriteLine(string.Format("{0} - {1} - {2}", IDNumber,Name,Year));
    }
}

public class DVD : Product
{
    public string Director = "";
    public string Genre = "";

    public DVD(int idNumber, string name, string director, int year, string genre) : base(idNumber, name, year)
    {
        Director = director;
        Genre = genre;
    }

    public override void ProductInfo()
    {
        Console.WriteLine(string.Format("[DVD - Product Information]: #{0} - {1} - {2} - {3} - {4}", IDNumber, Name, Director, Genre, Year));
    }
}
4

4 回答 4

4

List<Product>在通用对象上使用 LINQ :

using System.Linq;
...
var orderedList = filmList.OrderBy(z => z.Year).ToList();
于 2012-12-19T12:41:54.563 回答
2

您可以使用List.SortEnumerable.OrderBy

products.Sort((p1, p2) => p1.Year.CompareTo(p2.Year));

或(效率较低但可扩展性更强):

products = products.OrderBy(p => p.Year).ToList();

请注意,如果您不想将原始列表替换为有序列表,则无需将查询具体化为新列表。

于 2012-12-19T12:43:53.683 回答
0

这是什么List课?我知道List<T>,您可以在其上执行OrderBy(film => film.Year)LINQ 表达式。

于 2012-12-19T12:44:16.427 回答
0

首先,您必须键入您的方法以返回一个List<DVD>. 类型化的对象是避免装箱/拆箱对象的好习惯。

public List<DVD> GetFilms()
{
    ...
}

因此,您想通过对 Column 进行排序来显示它,在这种情况下,您可以使用 lambda 表达式来设置要排序的列。

// remeber to import
using System.Linq;

并做这样的事情:

List<DVD> result = GetFilms();

foreach(DVD film in result.OrderBy(f => f.Year))
{
   Console.Write(filme.Name);
}

就像一个提示,避免Console.WriteLine在你的班级内打电话。ToString()它是一个接口命令,如果您提供对 DVD 类、Product 类上的方法的覆盖而不是在模型类中写入它的方法,那就太好了。

于 2012-12-19T12:48:15.237 回答