执行将名称作为值存储在字典中的函数

本文关键字:字典 函数 存储 执行 | 更新日期: 2023-09-27 18:03:44

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

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

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

就可以得到我需要的函数
dict.Remove(string myKey)

但是我怎么调用它来执行呢?

执行将名称作为值存储在字典中的函数

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

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

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

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

dict.Add("Banana", getNumberofBananas);

您不希望从字典中删除元素。您需要从字典中提取它并调用它。假设您的委托类型为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);

和其他内容一样:

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

Remove…嗯…移除元素。你所需要的就是读取它——这就是索引器的作用。调用委托只需添加括号和参数。

如果你真的想调用你的函数,然后删除它:

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

其中ab是你所调用的函数的参数。

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