【发布时间】:2017-09-15 09:56:20
【问题描述】:
我正在阅读 C# In Depths 以尝试更好地理解该语言。我之前使用过带有单个参数的简单 lambda 表达式并且已经熟悉它们。我正在努力解决的部分是films.Sort((f1, f2) => f1.Name.CompareTo(f2.Name)); 对列表进行排序。据我所知,当我尝试向其添加 f3 时,lambda 表达式的计算结果为 IComparer<Film>。被调用的方法IComparer.Compare Method (T, T) 决定了项目的顺序。
第二个参数让我想说它比较列表中的第 N 和 Nth+1 film,并从 0 到 films.Count-1 进行比较。这个对吗?如果不是,我错在哪一部分。我不想避免错误假设并避免意外错误。
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var films = GetFilms();
Action<Film> print = film => Console.WriteLine("Name={0}, Year={1}", film.Name, film.Year);
Console.WriteLine("All films");
films.ForEach(print);
Console.WriteLine();
Console.WriteLine("Old films");
films.FindAll(film => film.Year < 1960).ForEach(print);
Console.WriteLine();
Console.WriteLine("Sorted films");
films.Sort((f1, f2) => f1.Name.CompareTo(f2.Name));
films.ForEach(print);
}
class Film
{
public string Name { get; set; }
public int Year { get; set; }
}
static List<Film> GetFilms()
{
return new List<Film>
{
new Film { Name = "Jaws", Year = 1975 },
new Film { Name = "Singing in the Rain", Year = 1952 },
new Film { Name = "Some like it Hot", Year = 1959 },
new Film { Name = "The Wizard of Oz", Year = 1939 },
new Film { Name = "It's a Wonderful Life", Year = 1946 },
new Film { Name = "American Beauty", Year = 1999 },
new Film { Name = "High Fidelity", Year = 2000 },
new Film { Name = "The Usual Suspects", Year = 1995 }
};
}
}
【问题讨论】: