我曾经阅读过Imaar Spaanjars的一篇文章,介绍如何构建三层应用程序。(http://imar.spaanjaars.com/416/building-layered-web-applications-with-microsoft-aspnet-20-part-1)这篇文章成为我的编码基础已经有一段时间了。
因此,我像他一样通过继承List<T>
来实现集合。所以如果我有一个名为Employee的类,为了实现一个集合,我也会有一个名为Employees的类,如下所示。
class Employee
{
int EmpID {get;set;}
string EmpName {get;set;}
}
class Employees : List<Employee>
{
public Employees(){}
}
我从来没有真正质疑过这一点,因为它可以为我完成工作。但是现在我开始尝试一些东西,我不确定这是否是正确的方法。
例如,如果我想从员工中获取一个子集,比如
Employees newEmployees = (Employees) AllEmployees.FindAll(emp => emp.JoiningDate > DateTime.Now);
这会抛出一个 System.InvalidCastException 异常。但是,如果我使用以下代码,则不会出现问题。
List<Employee> newEmployees = AllEmployees.FindAll(emp => emp.JoiningDate > DateTime.Now);
那么我如何实现员工(Employees),以便在我的 DAL 或 BLL 中不必显式使用 List<Employee>
?或者,我该如何摆脱 InvalidCastexception 异常?
Collection<T>
实现了IList<T>
,所以这通常不是问题。最终,通过子类化List<T>
并没有真正定义一个适当的实现,因为这对于 T 特定的逻辑没有任何帮助。 - Marc Gravell