小智 7
我建议你创建一组自己的树帮助器,例如,下一个是你的问题所在:
public static class TreeHelpers
{
public static IEnumerable<TItem> GetAncestors<TItem>(TItem item, Func<TItem, TItem> getParentFunc)
{
if (getParentFunc == null)
{
throw new ArgumentNullException("getParentFunc");
}
if (ReferenceEquals(item, null)) yield break;
for (TItem curItem = getParentFunc(item); !ReferenceEquals(curItem, null); curItem = getParentFunc(curItem))
{
yield return curItem;
}
}
//TODO: Add other methods, for example for 'prefix' children recurence enumeration
}
Run Code Online (Sandbox Code Playgroud)
使用示例(在您的上下文中):
IList<TreeNode> ancestorList = TreeHelpers.GetAncestors(node, x => x.Parent).ToList();
Run Code Online (Sandbox Code Playgroud)
为什么这比使用list <>更好.添加()? - 因为我们可以使用惰性LINQ函数,例如.FirstOrDefault(x => ...)
PS将"当前"项目包含在结果可枚举,使用中TItem curItem = item,而不是TItem curItem = getParentFunc(item)
| 归档时间: |
|
| 查看次数: |
14052 次 |
| 最近记录: |