如何制作可用作任何搜索模板的通用SearchDTO
?
它应该有任何过滤器和其他一般信息,如TotalRecords,Sort Order,Pages,Start Row等
public abstract class SearchDTO
{
public object Id { get; set; }
public IList<T> SearchResults { get; set; }
public int PageSize { get; set; }
public int StartRowNo
{
get
{
return (CurrentPage - 1) * PageSize;
}
}
public int CurrentPage { get; set; }
}
任何搜索对象都是。
public class EmployeeSearchDTO:SearchDTO
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
但是我在IList<T>
属性中收到以下错误:
找不到类型或命名空间名称“T”(您是否缺少using指令或程序集引用?)。
我如何指定像退出List of any objects
一样,我可以创建其他属性,如
public long TotalRecords
{
get
{
return SearchResults.Count;
}
set;
}
除此之外还有其他最佳方法来解决这个问题吗?
答案 0 :(得分:1)
您需要在班级中指定T
作为类型参数:
public abstract class SearchDTO<T>
然后当你继承它时 - 你应该提供具体的类型而不是类型参数:
public class EmployeeSearchDTO : SearchDTO<MyConcreteType>
或后继类也应该是通用的:
public class EmployeeSearchDTO<T> : SearchDTO<T>
答案 1 :(得分:1)
你也需要在课堂上申报,知道T是什么类型:
抽象类代码
public abstract class SearchDTO<T>
{
public object Id { get; set; }
public abstract IList<T> SearchResults { get; set; }
public int PageSize { get; set; }
public int StartRowNo
{
get
{
return (CurrentPage - 1) * PageSize;
}
}
public int CurrentPage { get; set; }
}
IList<T> SearchResults
必须在继承的类中声明为abstract和override。
EmployeeSearchDTOP代码
public class EmployeeSearchDTO:SearchDTO<Employee>
{
public override IList<Employee> SearchResults { get; set; }
}
创建Employee
课程并移动FirstName
&amp; Employee类中的LastName
属性。
员工类
public class Employee
{
public string FirstName {get; set; }
public string LastName {get;set;}
}
答案 2 :(得分:0)
除非您有特定的理由使用抽象类,否则只需使用模板类就可以实现:
public class SearchDTO<T>
{
public object Id { get; set; }
public IList<T> SearchResults { get; set; }
public int PageSize { get; set; }
public int StartRowNo
{
get
{
return (CurrentPage - 1) * PageSize;
}
}
public int CurrentPage { get; set; }
}
要创建对象,您需要做的就是:
SearchDTO<EmployeeSearchDTO> obj=new SearchDTO<EmployeeSearchDTO>();
而不是让SearchResults属性创建一个返回EmployeeSearchDTO
个对象列表的函数,如下所示:
public IList<T> SearchResults()
{
IList<T> listObj=new List<T>();
//your code here
return listObj;
}