You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:55:23