c# рекурсивно перебирать списки вложенных свойств
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;
}
как я могу сделать это cursively? Мне нужно объединить все экземпляры 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;
}
}
1 ответов
как это -- yield 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;
}
}