c# - 遍历嵌套对象以从每个对象中获取单个属性
问题描述
我有以下对象
public class WorkShift
{
public int TotalVios {get; set;}
public WorkShift NextWorkShift {get; set;}
}
我可以拥有无限数量的 NextWorkShift 对象,我如何从所有这些对象中获取 TotalVios,从根对象开始一直向下?我觉得这应该很简单,但我不认为我可以循环这个或类似的东西,我几乎需要某种递归方法?
我想要完成的是在该父对象中的所有对象上获取 TotalVios。所以基本上我正在寻找 int TotalViosForThisWorkShift;
它将通过转到顶部对象并添加到 TotalViosForThisWorkShift 来填充,然后转到其中的 NextWorkShift 并将 TotalVios 添加到 TotalViosForThisWorkShift 然后转到那里的 NextWorkShift 并将 TotalVios 添加到 TotalViosForThisWorkShift 等等。
解决方案
您可以自己编写一个小的扩展方法,如下所示来解析子节点。
public static class Extensions
{
public static IEnumerable<WorkShift> EnumerateChild(this WorkShift source)
{
yield return source;
var node = source.NextWorkShift;
while(node != null)
{
yield return node;
node = node.NextWorkShift;
}
}
}
现在您可以使用检索所有 TotalVios
var result = rootNode.EnumerateChild().Select(x=>x.TotalVios);
如果您需要总和(来自问题中的更新),那么您可以使用 IEnumerable.Sum() 方法
rootNode.EnumerateChild().Sum(x=>x.TotalVios)
推荐阅读
- java - 将xml转换为cvs
- amazon-dynamodb - 我想使用 UpdateItem API 更新 dynamo db 中的项目,但如果项目不存在,它会创建
- laravel - 按关系中的最新记录列排序
- php - 在 Laravel 中使用波斯字符 Slug
- c++ - 我可以从 32 位 GCC 编译器生成 64 位应用程序二进制文件吗?
- glsurfaceview - GlSurfaceView 透明背景不使用 GlSurfaceView.setZOrderOnTop(true);
- azure-sql-managed-instance - 具有私有 IP 虚拟网络的 Azure SQL 托管实例
- post - Axios POST 有效,但 axios.create POST 生成 400 Bad Request Error
- swift - iOS 13 上的 UITabBarController 色调问题
- java - 循环中的新对象在 Java 中被覆盖