C#:我可以将一个显式委托转换为Action委托吗?

时间:2009-10-09 21:14:45

标签: c# delegates lambda

假设:

delegate void Explicit();

我可以:

public void Test(Explicit d)
{
    Action a;
    a = d; // ????
}

我有一个场景需要重载具有以下内容的构造函数:

public MyClass(Expression<Action> a) {}

但是下面的重载是不明确的:

public MyClass(Action a) {}

我认为使用显式委托可以解决歧义但我需要将该显式委托强制转换为动作以利用现有代码。

3 个答案:

答案 0 :(得分:12)

Action a = new Action(d);

答案 1 :(得分:8)

否则您无法在彼此之间使用匹配的签名来转换不同的委托类型。您必须创建目标类型的新委托/ lambda表达式并转发到原始表达式。

答案 2 :(得分:4)

您还可以指定Invoke方法来创建新的Action delegate

Action a = new Action(d.Invoke);