2014-04-14 61 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