执行函数,名称存储为字典

时间:2015-07-21 15:11:34

标签: c#

我创建了一个字典,其中funcDef是一个函数的名称。例如,我添加到字典中的一些元素:

dict.Add("Banana", (a, b) => getNumberofBananas(a, b));
dict.Add("Apple", (a, b) => getNumberofApples(a, b));

其中getNumberofApples / Bananas是在同一个类中实现的公共函数。当我输入

时,我可以得到我需要的功能
dict.Remove(string myKey)

但我怎么称它为执行?

4 个答案:

答案 0 :(得分:3)

只需通过字符串键检索值并调用它,并传递适当的参数。

int numberOfBananas = dict["Banana"](a, b);

Remove将从您的字典中删除该条目,这可能不是您要完成的任务。

值得注意的是,根据您当前如何将函数添加到字典中,您的参数将在注册时捕获,运行时参数将被忽略。如果要在运行时提供值,请考虑使用以下语法。

dict.Add("Banana", getNumberofBananas);

答案 1 :(得分:1)

您不希望从字典中删除元素。您需要从字典中提取它并调用它。假设您的代表的类型为Func<int, int, int>

如果您确定密钥存在,请执行以下操作:

var result = dict["Apple"](a, b);

或(告诉你实际发生的事情):

var func = dict["Apple"];
var result = func(a, b);

否则,请使用Dictionary.TryGetValue

Func<int, int, int> func;
if (!dict.TryGetValue("Apple", out func))
{
    // No such function
}

int result = func(a, b);

答案 2 :(得分:1)

如果你真的想要调用你的功能然后删除它:

dict["Banana"](a, b);
dict.Remove("Banana");

ab是您正在调用的函数的参数。

我不确定你的代码dict.Remove("...")如何返回一个函数,因为文档说它返回一个bool,说明该元素是否被删除。

答案 3 :(得分:1)

就像其他任何事情一样:

dict["Banana"](a, b);

Remove ......好吧......删除元素。您所需要的只是读取它 - 这就是索引器的用途。然后调用委托只是添加括号和参数。