Подтвердить что ты не робот

Как создать общий метод, когда "тип" T "должен быть ссылочным типом"?

Возможный дубликат:
Why do I get "error: … must be a reference type" in my C# generic method?

У меня есть два метода репозитория, которые почти идентичны:

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, а второй - 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>()'

Возможно ли, чтобы я сделал этот общий способ другим?

4b9b3361

Ответ 1

Вы можете попробовать добавить ограничение class:

where T : class, ISearchableEntity