Ok vì vậy tôi có một số phương pháp mà trông như thế này: - mà sắp xếp một danh sách của nghệ sĩ, album, năm, vvTránh mã lặp lại khi sử dụng 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();
}
và điều này:
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();
}
Bây giờ rõ ràng đây không phải là mã tốt vì vậy nó cần tái cấu trúc thành một phương thức Sort() nhưng tôi không thể tìm ra cách để làm điều đó theo cách đơn giản nhất có thể. Tôi không quan tâm nếu nó sử dụng IComparer hoặc LINQ.
Tôi muốn nó giống như thế này:
public void Sort(SortOrder sortOrder, SortType sortType)
{
//implementation here
}
public enum SortType
{
Artist,
Album,
Year
}
Vì vậy, whats cách sạch nhất để làm điều này không có mã lặp lại?
Cảm ơn, Lee
Ngoài ra, nếu bạn, vì một lý do nào đó, không muốn viết xuống lambda rõ ràng trong lệnh gọi 'Sort' (nó coul d nhận được lớn), bạn có thể tạo một số loại danh sách với các đối tượng 'Func' được xác định trước (tương đương với enum trong ví dụ). –
Hài hước Tôi đọc rằng chỉ sáng nay trong cuốn sách LINQ trong Hành động –
Các đối số kiểu cho phương thức 'System.Linq.Enumerable.OrderByDescending (System.Collections.Generic.IEnumerable , System.Func ) 'không thể suy ra từ việc sử dụng. Hãy thử xác định các đối số kiểu một cách rõ ràng. Trên các đơn đặt hàng và orderbyDesc dòng. –