目前,如果我們得到有序的方向作爲外部的依賴,我們必須使用如果應用此方向:爲什麼有OrderBy和OrderByDescending但不是OrderBy(SortOrder)?
public static IEnumerable<FileInfo> getlist(string directory, string searchPattern, string order)
{
var files = new DirectoryInfo(directory).EnumerateFiles(searchPattern);
if (order == "A")
return files.OrderBy(f => f.CreationTime);
return files.OrderByDescending(f => f.CreationTime);
}
爲什麼沒有排序依據的重載需要爲了方向作爲參數? 在Reflector中,我發現它或多或少地在內部實現,但由於某種奇怪的原因而未公開。
我寧願喜歡寫這樣的事情:
public static IEnumerable<FileInfo> getlist(string directory, string searchPattern, string order)
{
return new DirectoryInfo(directory)
.EnumerateFiles(searchPattern)
.OrderBy(f => f.CreationTime, order == "A" ? SortOrder.Ascending : SortOrder.Descending);
}
更新:
我可以這樣寫我自己,只是希望它的已經在框架:
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
ListSortDirection order)
{
switch (order)
{
case ListSortDirection.Ascending: return source.OrderBy(keySelector);
case ListSortDirection.Descending: return source.OrderByDescending(keySelector);
}
throw new ArgumentOutOfRangeException("order");
}
+1:正是我要說的。 – 2010-07-14 21:40:40
感謝代碼,這不是重點。順便說一句,代碼將更加漂亮開關。 – 2010-07-14 22:01:09
爲了捕獲雙重性,您可以使用bool,但這會降低可讀性。 – 2010-07-14 22:08:52