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

时间:2016-02-05 17:58:02

标签: c#

如何迭代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);
            });
        }
    }
}

3 个答案:

答案 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);
});