当“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属于Fundtypes,第二个是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上使用的约束的完整列表

http://msdn.microsoft.com/en-us/library/d5x73970.aspx