[代码]
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?
答案 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);
}