Herdar a lista <T> para implementar coleções é uma má ideia?

Certa vez, li um artigo de Imaar Spaanjars sobre como criar aplicativos de três camadas. (http://imar.spaanjaars.com/416/building-layered-web-applications-with-microsoft-aspnet-20-part-1), que formou a base da minha codificação há um tempo.

Assim, eu implemento coleções como ele fez, herdando umList<T>. Portanto, se eu tiver uma classe chamada Employee, para implementar uma coleção, também terei uma classe Employees como abaixo.

class Employee
{
   int EmpID {get;set;}
   string EmpName {get;set;}  

}

class Employees : List<Employee>
{
   public Employees(){}
}

Eu realmente nunca questionei isso, pois fez o trabalho para mim. Mas agora que comecei a experimentar algumas coisas, não tenho certeza se essa é a abordagem correta.

por exemplo. se eu quiser obter um subconjunto de Funcionários, como

 Employees newEmployees = (Employees) AllEmployees.FindAll(emp => emp.JoiningDate > DateTime.Now);

Isso lança um System.InvalidCastException. No entanto, se eu usar o seguinte, não haverá problema.

List<Employee> newEmployees = AllEmployees.FindAll(emp => emp.JoiningDate > DateTime.Now);

Então, como eu implanto Funcionários para que eu não precise usar explicitamenteList<Employee> no meu DAL ou BLL? Ou talvez como me livrar da InvalidCastexception?

questionAnswers(4)

yourAnswerToTheQuestion