如何扩展Generic类并在C#中返回泛型类

时间:2014-03-12 12:08:37

标签: c# generics extension-methods

我有一个通用类

public class PagedData<T> where T : class
{
        public IEnumerable<T> Data { get; set; }
        public int CurrentPage { get; set; }
        public int TotalRowCount { get; set; }
        public int RowsPerPage { get; set; }
        public int NumberOfPages { get; set; }
}

我将扩展上面的课程,如下所示

public static PagedData<T> PagedResult<T>(this List<T> list)
{
     //some logic and return result as type PagedData<T>
     return null;
}

但是它显示了一个像

这样的buld错误
  

类型&#39; T&#39;必须是引用类型才能将其用作参数   &#39; T&#39;在通用类型或方法&#39; MyApplication.PagedData&#39;

请让我知道一个解决方案。 提前致谢

1 个答案:

答案 0 :(得分:4)

由于类PagedData<T>对类型参数T有约束,因此您必须在自己的方法上显式复制该约束:

public static PagedData<T> PagedResult<T>(this List<T> list) where T : class
{
     //some logic and return result as type PagedData<T>
     return null;
}

如果你不这样做,那么调用PagedResult<int>是“可能的”,但是它不可能返回PagedData<int> - 这就是编译器抱怨的原因。 / p>