Double Possible:
Pourquoi je reçois le message “erreur: ... doit être un type de référence” dans mon C# méthode générique?J'ai 2 Référentiel des méthodes qui sont presque identiques:
public IList<Fund> GetFundsByName(int pageSize, string searchExpression) { return _session.CreateCriteria<Fund>() .AddNameSearchCriteria<Fund>(searchExpression) .AddOrder<Fund>(f => f.Name, Order.Asc) .SetMaxResults(pageSize).List<Fund>(); } public IList<Company> GetCompaniesByName(int pageSize, string searchExpression) { return _session.CreateCriteria<Company>() .AddNameSearchCriteria<Company>(searchExpression) .AddOrder<Company>(f => f.Name, Order.Asc) .SetMaxResults(pageSize).List<Company>(); }
La seule différence est que le premier de l'
_session.CreateCriteria
est de typeFund
et le second,company
J'espérais que je pourrais faire à ce générique en modifiant la définition de la méthode pour:
public IList<T> GetEntitiesByName<T>(int pageSize, string searchExpression) where T : ISearchableEntity { return _session.CreateCriteria<T>() .AddNameSearchCriteria<T>(searchExpression) .AddOrder<T>(f => f.Name, Order.Asc) .SetMaxResults(pageSize).List<T>(); }
où ISearchableEntity est défini comme:
public interface ISearchableEntity { string Name { get; set; } }
mais, malheureusement, NHibernate n'aime pas cela et me donne l'erreur:
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic type or method 'NHibernate.ISession.CreateCriteria<T>()'
Est-il possible pour moi de faire ce générique d'une autre façon?
Réponses
Trop de publicités?
theburningmonk
Points
5590