嗨,我说我有以下类型的树
public class Element
{
public List<Element> element;
}
Run Code Online (Sandbox Code Playgroud)
让我们说树的根是
Element root = GetTree();
Run Code Online (Sandbox Code Playgroud)
我知道可以使用递归来检查这棵树的长度,但是这可以使用linq来检查这棵树的长度吗?
您可以编写一个扩展方法来递归地检索所有元素。
var allElements = root.element.Traverse(el => el.element);
Run Code Online (Sandbox Code Playgroud)
例如:
public static IEnumerable<T> Traverse<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> fnRecurse)
{
foreach (T item in source)
{
yield return item;
IEnumerable<T> seqRecurse = fnRecurse(item);
if (seqRecurse != null)
{
foreach (T itemRecurse in Traverse(seqRecurse, fnRecurse))
{
yield return itemRecurse;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
537 次 |
| 最近记录: |