我正在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个过程。
答案 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
可以添加输入和返回值。