Ok donc j'ai un certain nombre de méthodes qui ressemblent à ceci: - qui trie une liste par artiste, album, année, etc.éviter la répétition de code lors de l'utilisation LINQ
public void SortByAlbum(SortOrder sortOrder)
{
if (sortOrder == SortOrder.Ascending)
_list = _list.OrderBy(x => x.Album).ToList();
else if (sortOrder == SortOrder.Descending)
_list = _list.OrderByDescending(x => x.Album).ToList();
}
et ceci:
public void SortByArtist(SortOrder sortOrder)
{
if (sortOrder == SortOrder.Ascending)
_list = _list.OrderBy(x => x.Artist).ToList();
else if (sortOrder == SortOrder.Descending)
_list = _list.OrderByDescending(x => x.Artist).ToList();
}
Maintenant, évidemment, ce n'est pas bon code, donc il faut refactoriser en une méthode Sort(), mais je ne peux pas comprendre comment le faire de la manière la plus simple possible. Je m'en fiche si elle utilise IComparer ou LINQ.
Je veux qu'il ressemble à quelque chose comme ceci:
public void Sort(SortOrder sortOrder, SortType sortType)
{
//implementation here
}
public enum SortType
{
Artist,
Album,
Year
}
donc ce qui est la plus propre façon de le faire sans répétition de code?
Merci, Lee
Aussi, si pour une raison quelconque, vous ne voulez pas écrire le lambda explicite dans l'appel de 'Sort' d get big), vous pouvez créer une sorte de liste avec des objets prédéfinis 'Func' (équivalent à l'énumération dans l'exemple). –
Drôle je lis que ce matin dans le livre Linq in Action –
Les arguments de type pour la méthode 'System.Linq.Enumerable.OrderByDescending (System.Collections.Generic.IEnumerable , System.Func ) 'ne peut être déduit de l'utilisation. Essayez de spécifier explicitement les arguments de type. Sur les lignes orderby et orderbyDesc. –