Ok, así que tengo una serie de métodos que se parecen a esto: - la cual ordena una lista por artista, álbum, año, etc.Evitar la repetición de código cuando se utiliza 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();
}
y esto:
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();
}
Ahora, obviamente, este no es un buen código, por lo que necesita una refactorización en un método Sort(), pero no puedo encontrar la forma de hacerlo de la manera más simple posible. No me importa si usa IComparer o LINQ.
que quiere que se vea algo como esto:
public void Sort(SortOrder sortOrder, SortType sortType)
{
//implementation here
}
public enum SortType
{
Artist,
Album,
Year
}
Así que cuál es la forma más limpia de hacer esto sin la repetición de código?
Gracias, Lee
Además, si usted, por alguna razón, no desea anotar el lambda explícito en la llamada a 'Ordenar' (coul d obtener grande), puede crear algún tipo de lista con objetos 'Func' predefinidos (equivalente a la enumeración en el ejemplo). –
Divertido Lo leí esta misma mañana en el libro de Linq in Action –
Los argumentos de tipo para el método 'System.Linq.Enumerable.OrderByDescending (System.Collections.Generic.IEnumerable , System.Func ) 'no se puede inferir del uso. Intente especificar los argumentos de tipo explícitamente. En las líneas orderby y orderbyDesc. –