首页 > 编程语言 >C#-获取指定菜单的所有父菜单

C#-获取指定菜单的所有父菜单

时间:2022-10-21 11:33:17浏览次数:47  
标签:菜单 C# Menu listData parentId 获取 menu id

目录

菜单类

class Menu 
{
	public int id { get; set; }
	public string menu { get; set; }

	public int parentId { get; set; }
}

初始化数据

/// <summary>
/// 获取初始化数据
/// </summary>
/// <returns>初始化数据</returns>
public static List<Menu> getMenusData()
{
	List<Menu> listData = new List<Menu>();
	Menu menu = new Menu();
	menu.id = 1;
	menu.menu = "首页";
	menu.parentId = 0;
	listData.Add(menu);

	menu = new Menu();
	menu.id = 2;
	menu.menu = "首页-1";
	menu.parentId = 1;
	listData.Add(menu);
	
	menu = new Menu();
	menu.id = 3;
	menu.menu = "首页-2";
	menu.parentId = 1;
	listData.Add(menu);

	menu = new Menu();
	menu.id = 4;
	menu.menu = "我的内容";
	menu.parentId = 0;
	listData.Add(menu);

	menu = new Menu();
	menu.id = 5;
	menu.menu = "我的内容-1";
	menu.parentId = 4;
	listData.Add(menu);

	menu = new Menu();
	menu.id = 6;
	menu.menu = "我的内容-1-1";
	menu.parentId = 5;
	listData.Add(menu);


	menu = new Menu();
	menu.id = 7;
	menu.menu = "我的内容-2";
	menu.parentId = 4;
	listData.Add(menu);

	return listData;
}

递归获取父菜单的方法

/// <summary>
/// 获取菜单,一直到第一级菜单为止
/// </summary>
/// <param name="id">菜单 Id</param>
/// <returns>菜单</returns>
public static Menu getMenu(int id,List<Menu> listMenus) 
{
	List<Menu> listData = getMenusData();
	Menu menu = listData.Where(t => t.id == id).FirstOrDefault();
	listMenus.Add(menu);
	if (menu.parentId == 0) return menu;//找到第一级菜单,返回
	else  return getMenu(menu.parentId,listMenus);//继续往上找
}

测试方法

static void Main(string[] args)
{
	#region 获取菜单
	int id = 6;
	List<Menu> listMenus = new List<Menu>();
	getMenu(id,listMenus);
	listMenus = listMenus.OrderBy(t => t.id).ToList();//正序
	foreach (var item in listMenus)
	{
		Console.WriteLine(item.id);
		Console.WriteLine(item.menu);
		Console.WriteLine(item.parentId);
		Console.WriteLine("----");
	}
	#endregion
}

输出

4
我的内容
0
----
5
我的内容-1
4
----
6
我的内容-1-1
5
----

标签:菜单,C#,Menu,listData,parentId,获取,menu,id
From: https://www.cnblogs.com/Luoma_HaoWei/p/16812889.html

相关文章

  • Charles----伪造手机端的request和reponse参数
    使用场景:在测试中通过伪造reponse数据来模拟某些测试场景,如下截图。要求:通过修改reponse中的值,再次请求修改7为100,只是会显示为99+实现方式:1、通过breakpoints......
  • 【Mac 10.13.0】安装 libimobiledevice,提示报错:warning: unable to access '/Users/lu
    打开终端,执行命令:1.sudochown-RXXX/usr/local (XXX表示当前用户名)2.ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"......
  • 复制-粘贴大法(Copy-Paste):简单而有效的数据增强
    论文标题:SimpleCopy-PasteisaStrongDataAugmentationMethodforInstanceSegmentation论文地址:https://arxiv.org/pdf/2012.07177.pdf1、摘要建立有效的实例......
  • Ubuntu 22.10 (Kinetic Kudu) 发布
    2022年10月20日,Canonical发布了Ubuntu22.10,代号KineticKudu。最新的Ubuntu临时版本可帮助物联网开发人员和企业管理员受益。现在可以下载和安装Ubuntu22......
  • c# 判断字符串中是否包含指定字符或字符串
    一:使用string.Contains(str)方法String.Contains对大小写敏感,适用于区分大小写的判断。返回值为bool型二:使用sring.IndexOf(str)方法IndexOf函数对大小写不敏感,适用于不区......
  • C++之虚函数
    最近在看侯捷的深入浅出MFC时,了解到C++的相关知识,比如this指针到底是怎么出现的?虚函数是如何做到准确调用某个函数的,明明大家都长的一样?普通的成员函数是怎么被调用的?覆盖......
  • CVE-2021-23132:Joomla远程代码执行漏洞
    0x00概述:Joomla是一套知名的内容管理系统,使用的是php语言和mysql数据库开发的,可以在各大系统场景进行使用。影响版本:Joomla3.0.0~3.9.240x01复现过程:打开搭建好的环境......
  • 帆软fcra基础
      基础知识:finereport普通模板的共有5种预览方式;分页预览、填报预览、新填报预览、数据分析、移动端预览。finereport不需要激活就可以使用,但是只有2个并发数。fine......
  • 机器学习—决策树—分类与回归树(CART)算法
    1CART算法CART全称叫ClassificationandRegressionTree,即分类与回归树。CART假设决策树是二叉树,内部结点特征的取值只有“是”和“否”,左分支是取值为“是”的分支,有分......
  • HttpService
    usingSystem.Net.Http;usingSystem.Text;usingSystem.Text.Json;usingSystem.Threading.Tasks;usingBlazorShared;usingBlazorShared.Models;usingMicrosoft......