2014-04-14 57 views
4

我有一個字典使用字符串作爲鍵,Action函數作爲值。函數字典沒有指定參數

有沒有一種方法來定義字典,而不指定每個鍵的功能的參數?例如,假設我有一個功能foo(int a, string b)。是否可以分配dict['test'] = foo

我很抱歉如果這個問題已被問到 - 我不確定要搜索什麼。

+0

,你可以有字典[ 「測試」] =(A,B)=> FOO(A,B);但我不確定那是你想要的。目前還不清楚 – Murdock

+0

您是否想在字典中並排存儲具有不同參數的函數,或者'dict'總是同質的? '字典<字符串,行動>'應該工作,如果後者(並且在你的情況下有通用參數是有意義的)。 –

回答

3

是的,使用Delegate而不是鍵入功能。你可以用DynamicInvoke()來調用它們,參數可以通過一個數組傳遞。簡而言之:

Dictionary<string, Delegate>() _delegates; 

void Test1(int a) { } 
void Test2(int a, int b) { } 

void SetUp() { 
    _delegates = new Dictionary<string, Delegate>(); 
    _delegates.Add("test1", Test1); 
    _delegates.Add("test2", Test2); 
} 

void CallIt(string name, params object[] args) { 
    _delegates[name].DynamicInvoke(args); 
} 

嘗試:

CallIt("test1", 1); 
CallIt("test2", 1, 2); 
+0

謝謝你的例子;這是我正在尋找的。 – rookie