如何使一个比较器调用另一个比较器



上下文
我有一个电影列表,其中有标题和持续时间InMinutes:

Movie m1 = new Movie("Jurassic World Dominion", 149);
Movie m2 = new Movie("Top Gun Maverick", 152);
Movie m3 = new Movie("Docter Strange in the Multiverse of Madness", 119);

我还有一份这些电影的放映列表,其中包括一部开始时间为的电影

DateTime startTime1 = new DateTime(2022, 6, 18, 8, 30, 0);
DateTime startTime2 = new DateTime(2022, 6, 18, 9, 0, 0);
DateTime startTime3 = new DateTime(2022, 6, 18, 14, 0, 0);
Screening s1 = new Screening(m1, startTime1);
Screening s2 = new Screening(m2, startTime1);
Screening s3 = new Screening(m2, startTime2);
Screening s4 = new Screening(m3, startTime3);

为了根据电影的持续时间(从最长到最短)对其进行排序,我使用IComparer<T>接口:

class DurationComparer : IComparer<Movie> {
public int Compare(Movie x, Movie y) {
return y.DurationInMinutes.CompareTo(x.DurationInMinutes);
}
}

问题
现在我想以相同的方式对它们进行排序,但从放映列表而不是电影列表开始。我已经写了这段代码,它运行良好。。。

class MovieDurationComparer : IComparer<Screening> {
public int Compare(Screening x, Screening y) {
return y.Movie.DurationInMinutes.CompareTo(x.Movie.DurationInMinutes);
}
}

但我希望这位IComparer能利用第一个,以避免重复自己(DRY)。出于某种原因,我用一个方法做类似的事情没有问题,但用一个接口,我会陷入困境。

问题
如何从第二个公司呼叫第一个国际公司?

MovieDurationComparer类可以在其中创建Duration类的实例:

class MovieDurationComparer : IComparer<Screening> {
private DurationComparer durationComparer = new DurationComparer();
public int Compare(Screening x, Screening y) {
return durationComparer.Compare(x.Movie, y.Movie);
}
}

与user18387401不同的方法是简单地实现两种类型的接口:

class DurationComparer : IComparer<Movie>, IComparer<Screening>
{
public int Compare(Movie x, Movie y) {
return y.DurationInMinutes.CompareTo(x.DurationInMinutes);
}

public int Compare(Screening x, Screening y) {
return Compare(x.Movie, y.Movie);
}
}

相关内容

  • 没有找到相关文章

最新更新