C#匿名委托递归

2024-06-10 10:18

本文主要是介绍C#匿名委托递归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 方式一:

 var channelNewList = new List<ChannelView>();Action<ChannelView, List<ChannelView>> func = null;func = (q, list) =>{if (q.ChildList != null && q.ChildList.Count > 0){list.AddRange(q.ChildList);//q.ChildList.Clear();foreach (var item in q.ChildList){func(item, list);}}};foreach (var item in channel){channelNewList.Add(item);func(item, channelNewList);}

方式二:

加载的数据生成到select下拉框中,按照层级顺序显示

 /// <summary>/// 读取部门层级,全部部门都显示在同一级,父级后面跟子集,每个节点有Level层级int数据,/// </summary>/// <returns></returns>/// <remarks>/// 创建时间:2021-1-13 10:54:31/// </remarks>public async Task<List<DepartmentView>> GetListByTreeAsync(int? state){//读取部门List<Department> list2 = null;if (state.HasValue){list2 = await departmentDAL.GetListAsync(x => x.D_status == state);}else{//加载所有部门数据list2 = await departmentDAL.GetAllListAsync();}// 排除父id和本身id相同导致的递归异常list2 = list2.Where(x => x.Id != x.Parent_id).ToList();List<DepartmentView> cList = list2.Select(x => new DepartmentView() { Id = x.Id, Department_name = x.Department_name, Parent_id = x.Parent_id, Sno = x.Sno,D_status=x.D_status}).ToList();//输出列表,全部部门都显示在同一级目录,子集紧跟父级后面List<DepartmentView> dList = new List<DepartmentView>();Action<DepartmentView, List<DepartmentView>> func = null;func = (q, list) =>{if (q.Childs != null && q.Childs.Count > 0){foreach (var item in q.Childs){item.Level = q.Level + 1;item.Childs = cList.Where(x => x.Parent_id == item.Id).OrderBy(x => x.Sno).ToList();list.Add(item);if (item.Childs != null && q.Childs.Count > 0){func(item, list);}}                   }};//读取一级部门var list1 = cList.Where(x=>string.IsNullOrWhiteSpace(x.Parent_id)).ToList();for (int i = 0; i < list1.Count; i++){var item = list1[i];item.Childs = cList.Where(x => x.Parent_id == item.Id).OrderBy(x=>x.Sno).ToList();if (string.IsNullOrWhiteSpace(item.Parent_id)){item.Level = 1;dList.Add(item);}func(item, dList);}foreach (var item in dList){item.Childs?.Clear();}return dList;}
 public class DepartmentView {/// <summary>/// guid主键/// </summary>[Key]public string Id { set; get; }/// <summary>/// 部门名称/// </summary>public string Department_name { get; set; }/// <summary>/// 父级id/// </summary>public string Parent_id { get; set; }/// <summary>/// 是否启用,1=启用,0=禁用/// </summary>public byte? D_status { get; set; }/// <summary>/// 排序/// </summary>public int Sno { get; set; }/// <summary>/// 当前等级/// </summary>public uint Level { get; set; }/// <summary>/// 子集部门/// </summary>public List<DepartmentView> Childs { get; set; }}

执行结果:

 翰林院
*学士院
**学士甲舍
**学士乙舍
**学士丙舍
*中书舍人院
门下省
*礼部
*吏部
*工部
*刑部
*户部
*兵部

 

这篇关于C#匿名委托递归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047882

相关文章

C# 中变量未赋值能用吗,各种类型的初始值是什么

对于一个局部变量,如果未赋值,是不能使用的 对于属性,未赋值,也能使用有系统默认值,默认值如下: 对于 int 类型,默认值是 0;对于 int? 类型,默认值是 null;对于 bool 类型,默认值是 false;对于 bool? 类型,默认值是 null;对于 string 类型,默认值是 null;对于 string? 类型,哈哈,没有这种写法,会出错;对于 DateTime 类型,默

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

C#中,decimal类型使用

在Microsoft SQL Server中numeric类型,在C#中使用的时候,需要用decimal类型与其对应,不能使用int等类型。 SQL:numeric C#:decimal

算法与数据结构面试宝典——回溯算法详解(C#,C++)

文章目录 1. 回溯算法的定义及应用场景2. 回溯算法的基本思想3. 递推关系式与回溯算法的建立4. 状态转移方法5. 边界条件与结束条件6. 算法的具体实现过程7. 回溯算法在C#,C++中的实际应用案例C#示例C++示例 8. 总结回溯算法的主要特点与应用价值 回溯算法是一种通过尝试各种可能的组合来找到所有解的算法。这种算法通常用于解决组合问题,如排列、组合、棋盘游

C# 命名管道中客户端访问服务器时,出现“对路径的访问被拒绝”

先还原一下我出现错误的情景:我用C#控制台写了一个命名管道服务器,然后用ASP.NET写了一个客户端访问服务器,运行之后出现了下面的错误: 原因:服务器端的访问权限不够,所以是服务器端的问题,需要增加访问权限。(网上很多都说是文件夹的权限不够,情况不同,不适用于我这种情况) 解决办法: (1)在服务器端相应地方添加以下代码。 PipeSecurity pse = new PipeSec

C++ 重建二叉树(递归方法)

/*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/#include <vector>class Solution {public:/*** 代码

如何通过示例将旧版 C# 转换为 C# 12

随着 C# 的不断发展,每个新版本都会引入强大的新功能,从而提高语言的功能和可读性。通过从旧版本的 C# 迁移到 C# 12,您可以获得更高效、更易于维护和更具表现力的代码。 由于代码库遗留、公司限制以及对旧语言功能的熟悉,许多开发人员仍在使用旧版本的 C#。升级似乎很困难,但现代版本的 C# 具有显著的优势,例如更好的性能、增强的功能和更高的安全性。 通过增量重构、试点项目和团队培训逐步

C# 日志框架Serilog使用

1、框架和说明        C#日志框架Serilog支持多种场景输出,简单验证了一下,比较方便        包的安装,推荐直接使用“推荐NuGet包管理器”安装Serilog.AspNetCore,常见的组件都已经集成在一个包中,使用比较方便 2、配置文件        Serilog可以由配置文件来定义行为,而且配置文件的修改即时生效。参考配置文件如下: {"Serilog":

大学生自救数据结构与算法(py实现)——01递归

目录 目录 递归 基本概念 工作原理 基本要素 优点 缺点 实现技巧 实例解析:计算阶乘 斐波那契数列 高效的斐波那契数列 python中的最大递归深度 二分查找 基本原理 性能分析 优化与变体 线性递归  元素序列的递归求和 二路递归 二路递归的基本概念 典型应用 工作原理 多重递归  示例:计算卡特兰数(Catalan Number) 尾递

Android匿名共享内存

ashmem的使用流程如下: 1.ashmem_create_region创建匿名共享内存区域,本质是调用open系统调用 2.ioctl设置共享内存的名字和大小,设置的名字为/dev/ashmem/,名字的存在就为了能够让其他人找到目标 3.mmap映射文件中的虚拟内存以及物理内存 4.直接对着这一块地址区域读写。 其中ioctl必须设置名字和大小,不然没办法进行映射,因为在映射之前进行了校验