Используйте .Cast<>()
Метод расширения :
private readonly Dictionary<Type, List<object>> _cache;
public IList<T> Get<T> (Expression<Func<T, bool>> criteria)
{
return _cache[typeof(T)].Cast<T>().Where (criteria).ToList();
}
Если вы не совсем уверены, что все элементы относятся к типу T, вы можете использовать.OfType<T>()
вместо этого (который пропускает элементы, которые не могут быть приведены)
Редактировать Вам также необходимо использовать .OfType<T>()
, когда T является типом значения (структура),
Редактировать Поскольку в вашем комментарии упоминается IQueryable, это может помочь:
return _cache[typeof(T)].AsQueryable().Cast<T>().Where (criteria).ToList();