执行将名称作为值存储在字典中的函数
本文关键字:字典 函数 存储 执行 | 更新日期: 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");
其中a
和b
是你所调用的函数的参数。
我不确定如何在你的代码dict.Remove("...")
返回一个函数,因为文档说,它返回一个bool
说是否元素被删除。