Параметры общего типа могут быть дополнительно ограничены для ограничения того, что может быть предоставлено в качестве такого параметра. Ваше сообщение об ошибке говорит о том, что NHibernate.ISession.CreateCriteria<T>()
требует, чтобы его параметр типа был ограничен ссылочным типом . Поскольку ваш метод вообще не определяет никаких ограничений, компилятор C # понятия не имеет, является ли T
допустимым параметром типа для CreateCriteria<T>
.
Если мы более внимательно посмотрим на исходный код NHibernate, мы действительно можем заметить, что ISession.CreateCriteria<T>
объявлен следующим образом:
public ICriteria CreateCriteria<T>() where T : class
В результате вам нужно такое же ограничение для вашего метода, чтобы передаваемый ему параметр типа хорошо работал при вызове CreateCriteria
. Просто измените его на:
public IList<T> GetObjList<T>(T obj)
where T : class
{
/* ... */
}