Possible Duplicate:
Why do I get “error: … must be a reference type” in my C# generic method?¿Cómo hacer un método genérico cuando "tipo 'T' debe ser un tipo de referencia"?
tengo 2 métodos del repositorio que son casi idénticos:
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 única diferencia es que de la primera uno _session.CreateCriteria
es de tipo Fund
y el segundo es company
que estaba esperando que podría hacer esto genérico cambiando la definición del método a:
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>();
}
donde ISearchableEntity se define como:
public interface ISearchableEntity
{
string Name { get; set; }
}
NHibernate pero desafortunadamente no le gusta esto y me da el error:
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>()'
¿Es posible para mí hacer esta genérica alguna otra ¿camino?
Son '' Clases Fund' y company' Aquí? – AllenG
@AllenG, sí, Fund & Company son las clases – DaveDev
También podría mirar el código fuente de la función CreateCriteria y ver cómo lo restringen a un tipo de referencia y quizás podría emplear el mismo método para restringir su tipo genérico a un tipo de referencia. – AaronLS