使用N个动作参数

时间:2017-02-13 14:37:09

标签: c#

让我们假设我们初始化一个字典,我们想要存储我们的方法:

public Dictionary<string, Action<int>> Dic = Dictionary<string, Action<int>>;


public void one(int a) {};
public void two(int a, int b) {};

问题:有没有说它可以有1或2个整数作为参数?现在我正在做这个解决方案:

public void one(int a, int b) {};
public void two(int a, int b) {};

现在两个参数都有两个参数,即使第一个只需要1.

任何解决方案?

2 个答案:

答案 0 :(得分:1)

将使用最大数量的参数并人为地创建更多参数(一种可以被戏称为de-schönfinkelization的方法),这使得必须事先知道参数的最大数量(忽略了predefined delegates仅支持&#34;最多9种参数类型);但是,如果通过某种其他机制,您将知道参数的数量,您可以使用

Dictionary<string, object>

存储代理并将它们转换回所需的类型,如下所示。

((Action<int,int,int>)Dic["foo"])(1,2,3)

答案 1 :(得分:0)

我同意你的问题最好在代码设计层面得到解决的论点 - 但话虽如此,我相信你可以用dynamic实现你想要的目标:

static void Action(int a)
{
    Console.WriteLine(a);
}

static void Action(int a, int b)
{
    Console.WriteLine(a + b);
}

static void Main(string[] args)
{
    Dictionary<string, dynamic> Dic = new Dictionary<string, dynamic>();
    Dic.Add("ActionA", new Action<int>(Action));
    Dic.Add("ActionB", new Action<int, int>(Action));
    Dic["ActionB"](4, 5);
}