Ecco cosa ho
private readonly Dictionary<Type, List<object>> _cache;
public IList<T> Get<T> (Expression<Func<T, bool>> criteria)
{
return _cache[typeof(T)].Where (criteria);
}
Il compilatore si lamenta (giustamente) che non può convertire da oggetto a T.
Come dovrei procedere da lì?
return _cached[type].AsQueryable().Cast<T>().Where (criteria).ToList()
L'idea è di avere la List come IQueryable e quindi potrei Cast ...
Utilizza il metodo di estensione .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();
}
Se non sei assolutamente sicuro che tutti gli elementi siano di tipo T, puoi usare .OfType<T>()
invece (che salta gli elementi che non possono essere lanciati)
Modifica Avrete anche bisogno di utilizzare .OfType<T>()
quando T è un ValueType (struct).
Modifica Poiché il tuo commento cita IQueryable, questo potrebbe aiutare:
return _cache[typeof(T)].AsQueryable().Cast<T>().Where (criteria).ToList();
Ok, aggiustato:
return _cached[type].AsQueryable().Cast<T>().Where (criteria).ToList()
L'idea è di avere la List come IQueryable e quindi potrei Cast ...