我曾经读过Imaar Spaanjars的有关如何构建3层应用程序的文章。 (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);
那么,如何实现雇员,这样我就不必在DAL或BLL中显式使用
List<Employee>
?或者,也许我该如何摆脱InvalidCastexception? 最佳答案
我不会从List<T>
继承-它会引入此类问题,并且并没有真正的帮助(因为没有virtual
方法可以覆盖)。我要么使用List<T>
(或更抽象的IList<T>
),要么介绍多态性Collection<T>
具有虚拟方法。
注意:关于FindAll
之类的东西,您可能还会发现LINQ选项(例如.Where()
)有用的对应物;最值得注意的是,它们将适用于任何IList<T>
(或IEnumerable<T>
),而不仅仅是List<T>
和子类。