La coulée de type générique dans la requête linq

Donc, j'ai une classe qui accepte un paramètre de type générique, et il fait un peu particulières de manipulation si le paramètre type est une sous-classe d'un type donné.

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;
}

Mais je suis une exception sur la dernière ligne

Cannot convert type 'MySpecialModel' to 'T'

Si j'ai modifier le code pour utiliser as au lieu de casting, j'ai cette erreur.

The type parameter 'T' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint.

Ce qui me manque ici?

Mise à jour

Ce les besoins de la classe peut prendre n'importe quel paramètre de type, y compris structs et des types intégrés, donc une contrainte générique ne serait pas une solution adaptée dans mon cas.

  • avez-vous fixé la contrainte where T : class dans votre classe générique?
  • Non, mais qui ne fonctionne pas dans mon cas, comme la classe générique peut accepter à la fois de référence et de la valeur des paramètres de type.
  • voir mise à jour
InformationsquelleAutor p.s.w.g | 2013-03-11