Quindi ho una classe che accetta un parametro di tipo generico e fa una piccola gestione speciale se il parametro type è una sottoclasse di un determinato tipo.Trasmissione di tipo generico nella query linq
IEnumerable<T> models = ...
// Special handling of MySpecialModel
if (filterString != null && typeof(MySpecialModel).IsAssignableFrom(typeof(T)))
{
var filters = filterString.Split(...);
models =
from m in models.Cast<MySpecialModel>()
where (from t in m.Tags
from f in filters
where t.IndexOf(f, StringComparison.CurrentCultureIgnoreCase) >= 0
select t)
.Any()
select (T)m;
}
Ma sto un'eccezione sull'ultima riga
Cannot convert type 'MySpecialModel' to 'T'
Se cambio il codice per utilizzare as
invece di casting, ottengo questo errore.
The type parameter 'T' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint.
Cosa mi manca qui?
Aggiornamento
Questa classe bisogni possono prendere qualsiasi parametro tipo, inclusi struct
s e tipi built-in, in modo un vincolo generico non sarebbe una soluzione adeguata nel mio caso.
hai impostato il vincolo 'dove T: class' nella tua classe generica? –
@danradu No, ma non funzionerebbe nel mio caso in quanto la classe generica può accettare sia parametri di riferimento che di tipo valore. –
@ p.s.w.g, vedere aggiornamento – smartcaveman