我曾经读过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>和子类。

10-08 02:53