在列表中添加要在C#中列出的对象的字段

Ale*_*man 0 c# list object

所以我有一个对象列表(AllCompanies),列表中的所有对象都继承自同一个类(公司).而且我在类中都有一个字段,它们都是继承的,完全是另一个类(Employees).我想创建一个当前活动的每个Employee的列表,并且我将每个公司都放在一个对象列表中.正如您在下面看到的,我试图简单地将Employee的字段添加到列表中,但是我收到错误,因为我试图将对象转换为员工列表.

public class Main()
{
    List<List<Employee>> AllEmployees = new List<List<Employee>>();

    List<object> AllCompanies = new List<object>() { new SmallCompany(), new LargeCompany(), new SmallCompany() };

    AllCompanies.ForEach(delegate(object o)
    {
        // - Here's the problem.
        AllEmployees.Add(o.GetType().GetField("Employees").GetValue(o));
        // - Here's the problem.
    });
}

class Employee
{
    public string Name;
    public int Age;
    public Employee(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

class Company
{
    public List<Employee> Employees = new List<Employee>();
}

class SmallCompany : Company
{
    public SmallCompany(){}
}

class LargeCompany : Company
{
    public LargeCompany(){}
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能最有效地完成这项工作?

Ser*_*rvy 5

您不应该将列表键入类型列表object.对象都是Company对象,列表应该反映出来.

List<Company> AllCompanies = new List<Company>() 
{
        new SmallCompany(), 
        new LargeCompany(), 
        new SmallCompany() 
};
Run Code Online (Sandbox Code Playgroud)

这将消除对任何可能使生活变得艰难的可怕反射代码的需要.

一旦你将每个项目投射到一个新项目,给定一个选择器很容易做到:

var allEmployees = AllCompanies.Select(company => company.Employees);
Run Code Online (Sandbox Code Playgroud)