当“type”T必须是一个引用types“如何使一个方法通用?
可能重复:
为什么在我的C#generics方法中出现“错误:…必须是引用types”?
我有两个几乎相同的Repository方法:
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>(); }
唯一的区别是第一个_session.CreateCriteria
属于Fund
types,第二个是company
我希望我可以通过改变方法定义为通用:
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>(); }
ISearchableEntity被定义为:
public interface ISearchableEntity { string Name { get; set; } }
但不幸的是NHibernate不喜欢这个,并给我错误:
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>()'
我可以用其他方式来做这个通用的吗?
你可以尝试添加约束class
:
where T : class, ISearchableEntity
以下是您可以在T上使用的约束的完整列表