不带某些字段的对象的 C# 迭代列表
本文关键字:对象 迭代 列表 字段 | 更新日期: 2023-09-27 18:33:21
如何迭代只有四个字段中两个的对象的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);
});
}
}
}
看起来您只是想从集合中过滤项目 - 您正在做的事情工作正常,但它(可以说)更习惯地写成:
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( .. )
有关使用可为空 https://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx 的信息
反射可以帮助您获得仅有的前 2 个字段,因为仅填充 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);
});