Я хотел бы работать с упорядоченными перечислимыми и использовать интерфейсы в качестве возвращаемых типов, а не конкретные типы. Мне нужно вернуть упорядоченный набор объектов. Но при использовании IList<T>
реализации я не могу вернуть IOrderedEnumerable<T>
, так как IList<T>
не наследует IOrderedEnumerable<T>
.
В приведенном ниже примере у меня есть модель представления с хранилищем рядов, реализованным в виде List<T>
объектов рядов, которые, как они находятся в List<T>
, упорядочены. В качестве метода доступа я хочу вернуть отфильтрованный набор рядов, в который возвращаются только объекты серии определенного типа, сохраняя при этом исходный порядок среди фильтруемых элементов.
/// <summary>
/// Represents the view model for this module.
/// </summary>
public class ViewModel : AbstractViewModel
{
/// <summary>
/// Gets the series repository.
/// </summary>
/// <value>The series repository.</value>
public IList<ISeries> SeriesRepository { get; private set; }
//...
}
//8<-----------------------------
/// <summary>
/// Gets the series of the specified type.
/// </summary>
public IOrderedEnumerable<T> Series<T>() where T : ISeries
{
return ViewModel.SeriesRepository.OfType<T>(); //compiler ERROR
}
Компилятор говорит мне:
Error 14 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<T>' to 'System.Linq.IOrderedEnumerable<T>'. An explicit conversion exists (are you missing a cast?) ...
Как я могу поддержать такой сценарий? И почему List не реализует IOrderedEnumerable?
РЕДАКТИРОВАТЬ : Чтобы уточнить мои намерения: я просто хочу заявить на уровне интерфейса, что мой репозиторий имеет порядок, даже если он явно не указан ключом.
Так, .ThenBy
и др. Не следует добавлять новый заказ, так как уже есть один - мой единственный и только один. :-). Я вижу, что вот так, я скучаю по намерению .ThenBy
.