首页 > 解决方案 > 遍历嵌套对象以从每个对象中获取单个属性

问题描述

我有以下对象

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 等等。

标签: c#recursion

解决方案


您可以自己编写一个小的扩展方法,如下所示来解析子节点。

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)

推荐阅读