C#中如何匹配用户输入与方法列表并执行选中的方法?
实现C#方法的选择执行功能
我正在编写一段C#代码,已经创建了几个方法并将它们存入List<Action>列表中。现在想要实现用户从列表中选择一个方法并执行该方法的功能,避免所有方法同时运行,只输出所选方法的结果来提升效率。
原始代码如下:
class Program { //arrays static void Arrays() { Console.WriteLine("Enter number of cars:"); Console.ReadKey(); } // List static void List() { Console.WriteLine("Enter items for shopping list"); shoppingList.Add("Apples"); shoppingList.Add("oranges"); shoppingList.Add("milk"); shoppingList.Add("butter"); Console.ReadKey(); } static void Main(string[] strings) { List<Action> methods = new List<Action>(); methods.Add(Arrays); methods.Add(List); Console.WriteLine("what method do you want:"); string answer = Console.ReadLine(); foreach (Action a in methods.Where(//one of the methods == answer)); Console.WriteLine(//the method that is == answer); if (answer == //one methods in list) { Console.WriteLine(////the method that is == answer); } } }
问题分析与解决方案
原代码的核心问题是List<Action>仅存储了方法委托,无法直接通过用户输入的字符串(方法名)匹配到对应的方法。我们可以改用Dictionary<string, Action>来建立方法名与委托的映射,轻松实现字符串到方法的查找与执行,同时补充原代码中未定义的shoppingList。
修改后的完整代码:
using System; using System.Collections.Generic; class Program { // 定义购物列表 static List<string> shoppingList = new List<string>(); // 数组相关方法 static void Arrays() { Console.WriteLine("Enter number of cars:"); Console.ReadKey(); } // 购物列表相关方法 static void ShoppingList() { Console.WriteLine("Enter items for shopping list"); shoppingList.Add("Apples"); shoppingList.Add("oranges"); shoppingList.Add("milk"); shoppingList.Add("butter"); // 输出购物列表内容 Console.WriteLine("\n当前购物列表:"); foreach (var item in shoppingList) { Console.WriteLine($"- {item}"); } Console.ReadKey(); } static void Main(string[] args) { // 用Dictionary存储方法名与对应的委托,支持大小写不敏感匹配 Dictionary<string, Action> methodMap = new Dictionary<string, Action>(StringComparer.OrdinalIgnoreCase) { { "Arrays", Arrays }, { "ShoppingList", ShoppingList } }; // 显示可选方法 Console.WriteLine("可选方法:"); foreach (var methodName in methodMap.Keys) { Console.WriteLine($"- {methodName}"); } Console.WriteLine("\n请输入要执行的方法名:"); string answer = Console.ReadLine().Trim(); // 查找并执行方法 if (methodMap.TryGetValue(answer, out Action selectedMethod)) { Console.WriteLine($"\n正在执行 {answer} 方法..."); selectedMethod.Invoke(); } else { Console.WriteLine("输入的方法名不存在,请重新输入!"); } } }
关键说明
- 使用
Dictionary<string, Action>替代List<Action>,通过字符串键直接映射到对应的方法委托,解决了字符串匹配方法的问题 - 构造
Dictionary时传入StringComparer.OrdinalIgnoreCase,支持大小写不敏感的输入匹配,提升用户体验 - 先列出所有可选方法,让用户明确可输入的选项,减少输入错误
- 使用
TryGetValue安全查找方法,避免键不存在时抛出异常 - 修复了原代码中
shoppingList未定义的问题,并添加了购物列表的输出逻辑,让方法功能更完整
内容的提问来源于stack exchange,提问作者Coder_
相关产品推荐
相关产品推荐

