Actuellement, si nous obtenons la direction de la commande en tant que dépendance externe, nous devons utiliser si pour appliquer cette direction:Pourquoi OrderBy et OrderByDescending, mais pas 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);
}
Pourquoi est-il pas de surcharge de OrderBy qui prend la direction de l'ordre en tant que paramètre? Dans Reflector, je vois qu'il est plus ou moins implémenté en interne mais pas exposé pour une raison étrange.
Je préférerais préfère écrire quelque chose comme ceci:
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);
}
Mise à jour:
Je peux écrire moi-même, juste espérait que c'est déjà dans le cadre:
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: Exactement ce que j'allais dire. –
Merci pour le code, ce n'est pas le point. Btw, le code sera beaucoup plus joli avec le commutateur. –
Pour capturer la dualité, vous pouvez utiliser bool mais cela diminuera la lisibilité. –