如何使这更通用

时间:2011-07-03 10:03:50

标签: c# list ienumerable

[代码]

private static IOrderedEnumerable<Film> OrderBy(this IEnumerable<Film> source, Func<Film, object> order, bool desc)
{
    if (desc) { return source.OrderByDescending(order); }
    return source.OrderBy(order);
}

[现状]

当然,linq已经实施了一个订单。我只是想把它更多地发生。主要是为了学习东西,它并没有真正添加其他东西,我可以正常订购或通过降序使用相同的属性。

[问题]

但是我希望它更通用。目前它只需要IEnumerable&lt; T&gt;并返回IOrderedEnumerable&lt; T&gt; (其中T当前是电影。自定义模型)。 是否有任何通用类型的列表,可枚举或覆盖所有List,IEnumerable IOrderedEnumerable etcetc?

1 个答案:

答案 0 :(得分:3)

是的,有。它是IEnumerable<T>

List<T>之类的类会实现IEnumerable<T>接口,因此大多数集合都可以使用IEnumerable<T>的方法。


您忘记为方法指定通用参数:OrderBy<Film>

原始OrderBy方法还具有键类型的通用参数。您可能还想使用它,以确保比较正常工作,并且它不会进行大量不必要的装箱和拆箱:

private static IOrderedEnumerable<Film> OrderBy<Film, Key>(this IEnumerable<Film> source, Func<Film, Key> order, bool desc) {
  if (desc) { return source.OrderByDescending(order); }
  return source.OrderBy(order);
}