Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#when list中向列表添加对象的字段_C#_List_Object - Fatal编程技术网

在C#when list中向列表添加对象的字段

在C#when list中向列表添加对象的字段,c#,list,object,C#,List,Object,所以我有一个对象列表(AllCompanys),列表中的所有对象都继承自同一个类(Company)。我在类中还有一个字段,它们都继承自另一个类(Employees)。我想创建一个当前活动的每个员工的列表,并且我有一个对象列表中的每个公司。正如您在下面看到的,我试图简单地将Employee字段添加到列表中,但我遇到了一个错误,因为我试图将一个对象转换为Employee列表 public class Main() { List<List<Employee>> AllE

所以我有一个对象列表(AllCompanys),列表中的所有对象都继承自同一个类(Company)。我在类中还有一个字段,它们都继承自另一个类(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(){}
}
public类Main()
{
List AllEmployees=新列表();
List allcompanys=new List(){new SmallCompany(),new LargeCompany(),new SmallCompany()};
AllCompanys.ForEach(委托人(对象o)
{
//-问题出在这里。
Add(o.GetType().GetField(“Employees”).GetValue(o));
//-问题出在这里。
});
}
班级员工
{
公共字符串名称;
公共信息;
公共雇员(字符串名称,整数年龄)
{
名称=名称;
年龄=年龄;
}
}
阶级公司
{
公共列表员工=新列表();
}
公司类别:公司
{
上市公司(){}
}
类别:大公司
{
公共大型公司(){}
}

如何才能最有效地执行此操作?

您不应该将列表作为
对象的列表键入。这些对象都是
公司
对象,列表应该反映这一点

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

您不应将该列表作为
对象的列表键入
类型。这些对象都是
公司
对象,列表应该反映这一点

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

我不知道我是否理解你真正想要的东西,但如果我理解了,我认为这将更容易理解和解决:

class Program
{
    static void Main(string[] args)
    {
        List<ICompany> AllCompanies  = new List<ICompany>();
        AllCompanies.Add(new Company());
        AllCompanies.Add(new SmallCompany());
        AllCompanies.Add(new LargeCompany());
        List<Employee> AllEmployees = new List<Employee>();

        foreach(var Company in AllCompanies)
        { 
            Company.Employees.ForEach((Employee)=>
            {
                if(Employee.IsActive)
                    AllEmployees.Add(Employee);
            });
        }
    }
}

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

interface ICompany
{
    List<Employee> Employees { get; set; }
}
class Company: ICompany
{
    public List<Employee> Employees { get; set; }
}
class SmallCompany : ICompany
{
    public List<Employee> Employees { get; set; }
}
class LargeCompany : ICompany
{
    public List<Employee> Employees { get; set; }
}
类程序
{
静态void Main(字符串[]参数)
{
列出所有公司=新列表();
添加(新公司());
添加(新的SmallCompany());
添加(新的大公司());
List AllEmployees=新列表();
foreach(所有公司中的var公司)
{ 
公司.Employees.ForEach((员工)=>
{
if(Employee.IsActive)
所有员工。添加(员工);
});
}
}
}
班级员工
{
公共字符串名称;
公共信息;
公共福利活动;
公共雇员(字符串名称,整数年龄)
{
名称=名称;
年龄=年龄;
}
}
接口公司
{
列出雇员{get;set;}
}
类别公司:I公司
{
公共列表雇员{get;set;}
}
公司类别:I公司
{
公共列表雇员{get;set;}
}
类别大公司:I公司
{
公共列表雇员{get;set;}
}

我不知道我是否理解了您的实际需求,但如果我理解了,我认为这将是更容易理解和更简单的解决方案:

class Program
{
    static void Main(string[] args)
    {
        List<ICompany> AllCompanies  = new List<ICompany>();
        AllCompanies.Add(new Company());
        AllCompanies.Add(new SmallCompany());
        AllCompanies.Add(new LargeCompany());
        List<Employee> AllEmployees = new List<Employee>();

        foreach(var Company in AllCompanies)
        { 
            Company.Employees.ForEach((Employee)=>
            {
                if(Employee.IsActive)
                    AllEmployees.Add(Employee);
            });
        }
    }
}

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

interface ICompany
{
    List<Employee> Employees { get; set; }
}
class Company: ICompany
{
    public List<Employee> Employees { get; set; }
}
class SmallCompany : ICompany
{
    public List<Employee> Employees { get; set; }
}
class LargeCompany : ICompany
{
    public List<Employee> Employees { get; set; }
}
类程序
{
静态void Main(字符串[]参数)
{
列出所有公司=新列表();
添加(新公司());
添加(新的SmallCompany());
添加(新的大公司());
List AllEmployees=新列表();
foreach(所有公司中的var公司)
{ 
公司.Employees.ForEach((员工)=>
{
if(Employee.IsActive)
所有员工。添加(员工);
});
}
}
}
班级员工
{
公共字符串名称;
公共信息;
公共福利活动;
公共雇员(字符串名称,整数年龄)
{
名称=名称;
年龄=年龄;
}
}
接口公司
{
列出雇员{get;set;}
}
类别公司:I公司
{
公共列表雇员{get;set;}
}
公司类别:I公司
{
公共列表雇员{get;set;}
}
类别大公司:I公司
{
公共列表雇员{get;set;}
}

也许我不明白您在做什么,但您是否应该定义:将所有员工列为列表所有员工?为什么不将所有公司列为
列表
?不要使用
对象
。你在抛弃你的类型。另外,
公司
似乎更适合这里的界面。也许我不明白你在做什么,但你应该定义:将所有员工列为列表所有员工吗?为什么不将所有公司列为一个
列表
?不要使用
对象
。你在抛弃你的类型。另外,
Company
似乎更适合这里的界面。如果
SelectMany
可能更好?@DavidG取决于他想用它做什么。在问题中,他明确表示,他正在寻找一份员工名单,而不仅仅是一份员工名单。啊,是的,我刚刚看到了。如果
SelectMany
可能更好?@DavidG取决于他想用它做什么。在问题中,他明确表示,他正在寻找一份员工名单,而不仅仅是一份员工名单。啊,是的,我刚刚看到了。