将Func转换为Delegate

Mat*_*ero 11 .net c# delegates dynamic c#-4.0

我定义了以下委托:

public delegate object MyDelegate(dynamic target);
Run Code Online (Sandbox Code Playgroud)

我有一个Func<dynamic, object>对象:

Func<dynamic, object> myFunc
Run Code Online (Sandbox Code Playgroud)

我怎样才能转换myFuncMyDelegate

我试过这些说明,但都没有奏效:

MyDelegate myDeleg = myFunc;
MyDelegate myDeleg = (MyDelegate) myFunc;
MyDelegate myDeleg = myFunc as MyDelegate;
Run Code Online (Sandbox Code Playgroud)

usr*_*usr 11

您可以包装现有委托:

(MyDelegate)(x => myFunc(x))
Run Code Online (Sandbox Code Playgroud)

或等效地:

MyDelegate myDeleg = x => myFunc(x);
Run Code Online (Sandbox Code Playgroud)

这会导致每次调用时性能损失很小,但代码非常简单.

  • 为什么不只是“new MyDelegate(myFunc)”? (4认同)