Dan*_*nor 4 c# lambda delegates
鉴于:
delegate void Explicit();
Run Code Online (Sandbox Code Playgroud)
我可以吗:
public void Test(Explicit d)
{
Action a;
a = d; // ????
}
Run Code Online (Sandbox Code Playgroud)
我有一个场景,我需要重载具有以下内容的构造函数:
public MyClass(Expression<Action> a) {}
Run Code Online (Sandbox Code Playgroud)
但是下面的重载是模棱两可的:
public MyClass(Action a) {}
Run Code Online (Sandbox Code Playgroud)
我认为使用显式委托可以解决歧义但我需要将该显式委托强制转换为动作以利用现有代码.
Yur*_*ich 12
Action a = new Action(d);
Run Code Online (Sandbox Code Playgroud)
不,你不能在彼此之间使用匹配的签名来构建不同的委托类型.您必须创建目标类型的新委托/ lambda表达式并转发到原始表达式.