2011-07-03 17 views
2

[代碼]如何使這個更通用

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); 
} 

[現狀]

Ofcourse,LINQ已經實現了由順序。我只是試圖更多地生成它。主要是爲了學習東西,它並不真正添加其他東西,我可以通過正常順序訂購,或者通過降序使用相同的屬性進行訂購。

[問題]

但是我想使它更通用。目前只需要IEnumerable <T>並返回IOrderedEnumerable <T>(其中T當前是一個電影。自定義模型)。 是否有任何通用類型的列表,可枚舉或覆蓋所有List,IEnumerable IOrderedEnumerable etcetc?

回答

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); 
} 
+0

非常感謝。 –