将空函数存储在字典中

时间:2019-02-08 08:42:51

标签: c# function dictionary

我正在Forms上创建一个输入文本框,并且我想要特定的命令来调用某些过程,例如一旦输入了“时间”,将返回一个带有当前时间的消息框。

我目前使用案例,但希望直接从字典中调用函数

private void enter_button_Click(object sender, EventArgs e)
        {
            Dictionary<string, Int64> commandDict = new Dictionary<string, Int64>()
            {
                ["Do1"] = 1,
                ["Do2"] = 2,
                ["Do3"] = 3
            };
            long caseInput = 0;
            try
            {
                caseInput = Convert.ToInt64(commandDict[(textBox1.Text).ToLower()]); 
//Returns dict value as long integer /\
            }
            catch { }
            switch (caseInput)
            {
                case 1:
                    Console.WriteLine("Do Thing 1")
                    break;
                case 2:
                    Console.WriteLine("Do Thing 2")
                    break;
                case 3:
                    Console.WriteLine("Do Thing 3") 
                    break;
                default:
                    Console.WriteLine("Incorrect Input")
                    break;

我希望案例1,2和3是单独的函数(它们的功能被低估了,但是没有一个返回值,并且没有输入参数)。我希望commandDict(我当前的字典,当文本“ Do1”等输入到“ textBox1.Text”中时调用这3个过程。

3 个答案:

答案 0 :(得分:2)

然后将字典声明为Dictionary<string, Action>,然后将函数名称作为值添加到字典中。

答案 1 :(得分:1)

您可以使用如下代码。字典应该可以帮助您实现自己想做的事。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;

public class Test
{
    public static void Main(string[] args)
    {
        Dictionary<string, Action> dict = new Dictionary<string, Action>();
       dict.Add("Do1", ActionDo1);  
        dict.Add("Do2", ActionDo1); 

        dict["Do1"]();
    }

    public static void ActionDo1()
    {
        Console.WriteLine("The Do1 is called");
    }

    public static void ActionDo2()
    {
        Console.WriteLine("The Do2 is called");
    }


}

希望这会有所帮助。

答案 2 :(得分:0)

这种方式:

class Program
{
    private static Dictionary<string, Delegate> methods = new Dictionary<string, Delegate>();
    static void Main(string[] args)
    {
        methods.Add("Test1", new Action<string>(str => { Console.WriteLine(str); }));
        methods.Add("Test2", new Func<string, bool>(str => { return string.IsNullOrEmpty(str); }));
    }
}

您将可以将Action添加到字典中,它等于void方法,而Func可以添加输入和返回值。