C#对没有某些字段的对象迭代列表

C#对没有某些字段的对象迭代列表,c#,C#,如何迭代四个字段中只有两个字段的对象列表? 下面的代码到目前为止仍然有效,但在C中有更简单的方法吗 使用系统; 使用System.Collections.Generic; 命名空间控制台应用程序1 { 班级计划 { 私有静态void Main() { 变量列表=新列表 { 新员工(“A”,32,5235.322004,3,2), 新员工(“B”,281435.432011,11,23), 新雇员(“C”,473416.491997,5,17), 新员工(“D”,22岁), 新雇员(“E”,57岁

如何迭代四个字段中只有两个字段的对象列表? 下面的代码到目前为止仍然有效,但在C中有更简单的方法吗

使用系统;
使用System.Collections.Generic;
命名空间控制台应用程序1
{
班级计划
{
私有静态void Main()
{
变量列表=新列表
{
新员工(“A”,32,5235.322004,3,2),
新员工(“B”,281435.432011,11,23),
新雇员(“C”,473416.491997,5,17),
新员工(“D”,22岁),
新雇员(“E”,57岁)
};
list.ForEach(l=>{
如果(l.Salary==0)Console.WriteLine(“{0}{1}”,l.Name,l.Age);
});
}
}
}

看起来您只是在尝试从集合中筛选项目-您所做的工作很好,但(可以说)更习惯地写为:

foreach(var l in list.Where(x => x.Salary == 0))
{
    Console.WriteLine(" {0} {1}", l.Name, l.Age);
}

最简单的方法是让字段为空

class Employee
{
    // strings are nullable
    public string Name { get; set; }
    // this allows double values to be nullable (the ? at the end)
    public double? Salary { get; set; }
    public double? Double1 { get; set; }
}
那么当你询问

var list = new List<Employee>();
// You can filter your list with Where() on if values have a value set or not
list.Where(x=> x.Salary.HasValue == false).ToList().ForEach( .. )
var list=newlist();
//如果值已设置或未设置值,则可以使用Where()on筛选列表
list.Where(x=>x.Salary.HasValue==false).ToList().ForEach(…)

有关使用Nullable

反射的信息可以帮助您获得前两个字段,因为只有两个字段被填写的情况是姓名和年龄,因此这将有助于您:

list.Where(l => l.GetType().GetProperties().Count(e => e.GetValue(e)!=null) == 2).ToList().ForEach(l => 
{
     Console.WriteLine(" {0} {1}", l.Name, l.Age);
});

你说的四个字段中只有两个是什么意思?@MichaelMairegger显然是说只有两个或四个字段@DrewKennedy我不明白你的问题是什么你不知道在构造对象后调用了什么构造函数来初始化对象,您需要依赖该构造函数的一个副作用来筛选出您不想要的项(例如,
salary==0
),或者更好的是,不要将它们放在同一个集合中。
Employee(string,int)
创建与
Employee(string,int,double,无论什么)相同的对象。
。它们不是不同的对象。
list.Where(l => l.GetType().GetProperties().Count(e => e.GetValue(e)!=null) == 2).ToList().ForEach(l => 
{
     Console.WriteLine(" {0} {1}", l.Name, l.Age);
});