繁体   English   中英

c#以递归方式迭代嵌套属性列表

[英]c# iterate over nested property lists recursively

foreach (TargetObject innerObject1 in complexObject.InnerObjects) { 
    foreach (TargetObject innerObject2 in innerObject1.InnerObjects) { 
        foreach (TargetObject innerObject3 in innerObject2.InnerObjects) { 
           yield return innerObject3;
        } 
        yield return innerObject2;
    } 
    yield return innerObject1;
 }

我怎么能这么做呢? 我需要将这些嵌套列表中捕获的TargetObject所有实例聚合到一个列表中。 这是一次无效的尝试。

 public static IEnumerable<TargetObject> GetRecursively(params TargetObject[] startingObjects) 
    {
        foreach (TargetObject startingObject in startingObjects) 
        {
            foreach (TargetObject innerObject in GetRecursively(startingObject.InnerObjects.ToArray()))
            {
                yield return innerObject;
            }
            yield return startingObject;
        }
    }

像这样 - 产生startingObject,并为InnerObjects每个项递归调用:

public static IEnumerable<TargetObject> GetRecursively(TargetObject startingObject) 
{
    yield return startingObject;
    if (startingObject.InnerObjects != null)
        foreach (TargetObject innerObject in startingObject.InnerObjects.ToArray())
            foreach (TargetObject recursiveInner in GetRecursively(innerObject))
                yield return recursiveInner;
}

要支持数组作为参数,请围绕它包装foreach

public static IEnumerable<TargetObject> GetRecursively2(params TargetObject[] startingObjects)
{
    foreach (TargetObject startingObject in startingObjects)
    {
        yield return startingObject;
        if (startingObject.InnerObjects != null)
            foreach (TargetObject innerObject in startingObject.InnerObjects.ToArray())
                foreach (TargetObject recursiveInner in GetRecursively(innerObject))
                    yield return recursiveInner;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM