2015-07-21 49 views
2

我已经创建了一个字典,其中funcDef是一个函数的名称。例如,某些元素的我添加到我的字典:执行名称存储为字典中的值的函数

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

凡getNumberofApples /香蕉在同一个类中实现公共职能。我能得到我所需要的功能,当我键入

dict.Remove(string myKey) 

但我怎么能调用它来执行?

回答

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); 
+0

当我有那个var result = dict [“Apple”](a,b);我如何调用该函数? – Iva

+1

这就是你如何调用该函数。对'dict [“Apple”]的调用从字典中检索委托,并用'a'和'b'参数调用委托。 –

+0

'dict [“Apple”](a,b)'如果我没有弄错,就会调用这个函数。 – Ric

1

如果你真的想打电话给你的功能,然后再移动它:

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

ab是参数你调用该函数。

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

+0

我试过这一个,它不工作。它说“方法名称预计” – Iva

3

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

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

Remove将删除你的字典,这可能不是你想要完成什么的条目。

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

dict.Add("Banana", getNumberofBananas); 
1

就像别的:

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

Remove ...好...删除元素。所有你需要的是阅读它 - 这是索引的目的。调用委托就是添加括号和参数。

+1

嘿......根据你的个人资料图片,你似乎有足够的经验来回答这个问题。 :) – Jashaszun

相关问题