• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
成为自己最想成为的那种人
博客园    首页    新随笔    联系   管理    订阅  订阅
C# 使用递归获取所有下属、所有子部门……

本例中获取的是所有的晚辈!首先定义家庭成员类:

    public class FamilyMember
    {
        /// <summary>
        /// 身份
        /// </summary>
        public string identity { get; set; }
        public int level { get; set; }
        /// <summary>
        /// 父亲
        /// </summary>
        public string father { get; set; }
    }

然后,定义递归方法:

        /// <summary>
        /// 递归获取晚辈
        /// </summary>
        /// <param name="members"></param>
        /// <param name="m"></param>
        /// <returns></returns>
        public static List<FamilyMember> GetYoungers(List<FamilyMember> members, FamilyMember m)
        {
            var result = new List<FamilyMember>();

            //获取子女
            var subordinate = members.Where(e => e.father == m.identity).ToList();

            //如果存在子女
            if (subordinate != null)
            {
                result.AddRange(subordinate);
                foreach (var subo in subordinate)
                {
                    result.AddRange(GetYoungers(members, subo));
                }
            }

            return result;
        }

  方法解释:

    首先,既然是递归,肯定是自己调用自己;

    然后,在方法体内部:

        既然要获取所有的下属(晚辈),首先要获取自己的直属下属,并将结果存入“下属”集合中;

        然后遍历所有直接下属,通过递归,调用方法本身,获取 “直属下属的直属下属”,同样存入“下属”集合中;

        最后,返回“下属”集合。

递归测试:

        /// <summary>
        /// 测试递归
        /// </summary>
        public static void CheckRecursion()
        {
            List<FamilyMember> list = new List<FamilyMember>
            {
                new FamilyMember{ identity = "爷爷", level = 1, father = ""},
                new FamilyMember{ identity = "爸爸", level = 2, father = "爷爷"},
                new FamilyMember{ identity = "叔叔", level = 2, father = "爷爷"},
                new FamilyMember{ identity = "自己", level = 3, father = "爸爸"},
                new FamilyMember{ identity = "弟弟", level = 3, father = "爸爸"},
                new FamilyMember{ identity = "堂兄", level = 3, father = "叔叔"},
                new FamilyMember{ identity = "堂弟", level = 3, father = "叔叔"},
                new FamilyMember{ identity = "儿子", level = 4, father = "自己"},
                new FamilyMember{ identity = "女儿", level = 4, father = "自己"},
                new FamilyMember{ identity = "侄子", level = 4, father = "弟弟"},
                new FamilyMember{ identity = "侄女", level = 4, father = "弟弟"}
            };

            var self = new FamilyMember { identity = "爷爷", level = 1, father = "" };

            var youngers = GetYoungers(list, self).OrderBy(p => p.level).ToList();
            if(youngers != null)
            {
                foreach(var p in youngers)
                {
                    Console.WriteLine(p.identity);
                }
            }
        }

  调用该方法即可查看效果:

  

 

posted on 2019-09-26 16:48  遇见未来  阅读(3392)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3