2015-07-21 69 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

相關問題