/// <summary> /// 递归取出所有上级 /// </summary> /// <param name="t"></param> /// <returns></returns> private static List <T> GetParents <T>(ITreeParent <T> t) where T : ITreeParent <T> { var list = new List <T>() { t.Parent }; return(t.Parent != null?list.Union(GetParents(t.Parent)).ToList() : list); }
/// <summary> /// 深度层级 /// </summary> public static int Level <T>(this ITreeParent <T> tree) where T : ITreeParent <T> => IsRoot(tree) ? 1 : Level(tree.Parent) + 1;
/// <summary> /// 是否是根节点 /// </summary> public static bool IsRoot <T>(this ITreeParent <T> tree) where T : ITreeParent <T> => tree.Parent == null;
/// <summary> /// 所有父级 /// </summary> public static ICollection <T> AllParent <T>(this ITreeParent <T> tree) where T : ITreeParent <T> => GetParents(tree);