如何迭代List<>只有两个四个字段的对象? 下面的代码到目前为止工作,但在C#中有更简单的方法吗?
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
private static void Main()
{
var list = new List<Employee>
{
new Employee("A", 32, 5235.32, 2004, 3, 2),
new Employee("B", 28, 1435.43, 2011, 11, 23),
new Employee("C", 47, 3416.49, 1997, 5, 17),
new Employee("D", 22),
new Employee("E", 57)
};
list.ForEach(l => {
if (l.Salary == 0) Console.WriteLine(" {0} {1}", l.Name, l.Age);
});
}
}
}
答案 0 :(得分:1)
看起来你只是想过滤一个集合中的项目 - 你正在做的工作正常,但它(可以说)更具惯用性地写为:
foreach(var l in list.Where(x => x.Salary == 0))
{
Console.WriteLine(" {0} {1}", l.Name, l.Age);
}
答案 1 :(得分:0)
最简单的方法是让字段可以为空。
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( .. )
有关使用Nullable https://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
的信息答案 2 :(得分:0)
反射可以帮助您获得仅有的2个第一个字段,因为只有两个字段被填充的唯一情况是名称和年龄,这样可以帮助您:
list.Where(l => l.GetType().GetProperties().Count(e => e.GetValue(e)!=null) == 2).ToList().ForEach(l =>
{
Console.WriteLine(" {0} {1}", l.Name, l.Age);
});