我创建了一个字典,其中funcDef是一个函数的名称。例如,我添加到字典中的一些元素:
dict.Add("Banana", (a, b) => getNumberofBananas(a, b));
dict.Add("Apple", (a, b) => getNumberofApples(a, b));
其中getNumberofApples / Bananas是在同一个类中实现的公共函数。当我输入
时,我可以得到我需要的功能dict.Remove(string myKey)
但我怎么称它为执行?
答案 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");
a
和b
是您正在调用的函数的参数。
我不确定你的代码dict.Remove("...")
如何返回一个函数,因为文档说它返回一个bool
,说明该元素是否被删除。
答案 3 :(得分:1)
就像其他任何事情一样:
dict["Banana"](a, b);
Remove
......好吧......删除元素。您所需要的只是读取它 - 这就是索引器的用途。然后调用委托只是添加括号和参数。