能否向类传递函数?控制台菜单选项绑定执行方法的技术问询
实现菜单选项绑定执行方法的方案
完全可行,你只需要在MenuOption类中添加一个用于存储执行逻辑的委托属性,就能实现选择菜单后调用Execute()触发对应工具类方法的需求。
修改后的MenuOption类
using System; using System.Collections.Generic; using System.Text; public class MenuOption { // 用于存储菜单选项对应的执行逻辑 public Action? OnExecute { get; set; } public MenuOption() { } public MenuOption(ConsoleKey key, string optionLabel, string optionText) { Key = key; OptionLabel = optionLabel; OptionText = optionText; } public MenuOption(ConsoleKey key, string optionLabel, string optionText, List<MenuOption> subMenu) { Key = key; OptionLabel = optionLabel; OptionText = optionText; SubMenu = subMenu; } // 添加带执行逻辑的构造函数,更方便创建选项 public MenuOption(ConsoleKey key, string optionLabel, string optionText, Action executeAction) { Key = key; OptionLabel = optionLabel; OptionText = optionText; OnExecute = executeAction; } public ConsoleKey? Key { get; set; } = null; public string OptionLabel { get; set; } = string.Empty; public string OptionText { get; set; } = string.Empty; public List<MenuOption> SubMenu { get; set; } = new List<MenuOption>(); public string Display() { StringBuilder menu = new StringBuilder(); menu.AppendLine("Press the number associated with the option of your choice or [Esc] to exit."); foreach (MenuOption option in SubMenu) { if (option.Key == ConsoleKey.Escape) { menu.AppendLine($"{option.OptionLabel} {option.OptionText}"); } else { menu.AppendLine($"{option.OptionLabel}. {option.OptionText}"); } } return menu.ToString(); } // 执行绑定的逻辑 public void Execute() { OnExecute?.Invoke(); } }
绑定工具类方法的示例
假设你有一个工具类ToolClass:
public static class ToolClass { public static void DoSomething() { Console.WriteLine("执行了工具类的DoSomething方法"); } public static void ShowSettings() { Console.WriteLine("显示设置界面"); } }
创建菜单选项时直接绑定工具类方法:
// 创建主菜单选项 var mainMenu = new MenuOption { SubMenu = new List<MenuOption> { new MenuOption(ConsoleKey.D1, "1", "执行操作", ToolClass.DoSomething), new MenuOption(ConsoleKey.D2, "2", "查看设置", ToolClass.ShowSettings), new MenuOption(ConsoleKey.Escape, "[Esc]", "退出程序", () => Environment.Exit(0)) } }; // 模拟用户选择后的执行逻辑 Console.WriteLine(mainMenu.Display()); Console.Write("请选择选项:"); var key = Console.ReadKey(true).Key; var selectedOption = mainMenu.SubMenu.FirstOrDefault(o => o.Key == key); selectedOption?.Execute();
这样用户选择对应选项后,调用selectedOption.Execute()就会触发绑定的工具类方法,完全符合你的需求。
内容的提问来源于stack exchange,提问作者John Butler
相关产品推荐
相关产品推荐

