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; } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。