[英]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;
}
How can I do this cursively? 我怎么能这么做呢? I need to aggregate all instances of TargetObject
trapped in these nested listed into one list. 我需要将这些嵌套列表中捕获的TargetObject
所有实例聚合到一个列表中。 Here's an attempt that didn't work. 这是一次无效的尝试。
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;
}
}
Like this -- yield startingObject, and call recursively for each item in InnerObjects
: 像这样 - 产生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;
}
To support an array as the parameter, wrap a foreach
around it: 要支持数组作为参数,请围绕它包装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.