Possible Duplicate:
Why do I get “error: … must be a reference type” in my C# generic method?Comment rendre une méthode générique quand "type 'T' doit être un type de référence"?
J'ai 2 méthodes de dépôt 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 _session.CreateCriteria
est de type Fund
et le second est company
J'espérais que je pourrais faire ce générique en changeant la définition de la méthode à:
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 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>()'
moi Est-il possible de faire ce générique d'une autre façon?
Are '' Fund' et classes company'? – AllenG
@AllenG, oui, Fund & Company sont des classes – DaveDev
Pourrait également éventuellement regarder le code source de la fonction CreateCriteria et voir comment ils le contraignent à un type de référence et peut-être vous pourriez employer la même méthode pour contraindre votre type générique à un type de référence. – AaronLS