program story

"유형 'T'가 참조 유형이어야 할 때"메소드를 제네릭으로 만드는 방법은 무엇입니까?

inputbox 2020. 10. 11. 10:32
반응형

"유형 'T'가 참조 유형이어야 할 때"메소드를 제네릭으로 만드는 방법은 무엇입니까?


중복 가능성 :
C # 제네릭 메서드에서 "오류 :… 참조 형식이어야합니다"가 표시되는 이유는 무엇입니까?

거의 동일한 두 가지 저장소 방법이 있습니다.

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>()'

이 일반적인 방법을 다른 방법으로 만들 수 있습니까?


제약 조건을 추가해 볼 수 있습니다 class.

where T : class, ISearchableEntity

다음은 T에서 사용할 수있는 제약 조건의 전체 목록입니다.

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

참고 URL : https://stackoverflow.com/questions/3365134/how-to-make-a-method-generic-when-type-t-must-be-a-reference-type

반응형