在C#when list中向列表添加对象的字段
所以我有一个对象列表(AllCompanys),列表中的所有对象都继承自同一个类(Company)。我在类中还有一个字段,它们都继承自另一个类(Employees)。我想创建一个当前活动的每个员工的列表,并且我有一个对象列表中的每个公司。正如您在下面看到的,我试图简单地将Employee字段添加到列表中,但我遇到了一个错误,因为我试图将一个对象转换为Employee列表在C#when list中向列表添加对象的字段,c#,list,object,C#,List,Object,所以我有一个对象列表(AllCompanys),列表中的所有对象都继承自同一个类(Company)。我在类中还有一个字段,它们都继承自另一个类(Employees)。我想创建一个当前活动的每个员工的列表,并且我有一个对象列表中的每个公司。正如您在下面看到的,我试图简单地将Employee字段添加到列表中,但我遇到了一个错误,因为我试图将一个对象转换为Employee列表 public class Main() { List<List<Employee>> AllE
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取决于他想用它做什么。在问题中,他明确表示,他正在寻找一份员工名单,而不仅仅是一份员工名单。啊,是的,我刚刚看到了。