【问题标题】:Convert Func to Delegate [duplicate]将 Func 转换为委托 [重复]
【发布时间】:2015-07-08 17:20:54
【问题描述】:

我定义了以下委托:

public delegate object MyDelegate(dynamic target);

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

Func<dynamic, object> myFunc

如何将myFunc 转换为MyDelegate

我已经尝试了这些说明,但都没有奏效:

MyDelegate myDeleg = myFunc;
MyDelegate myDeleg = (MyDelegate) myFunc;
MyDelegate myDeleg = myFunc as MyDelegate;

【问题讨论】:

  • 我认为最好的是MyDelegate myDeleg = myFunc.Invoke;,来自Cast delegate to Func in C#。还有MyDelegate myDeleg = new MyDelegate(myFunc)

标签: c# .net c#-4.0 dynamic delegates


【解决方案1】:

您可以包装现有的委托:

(MyDelegate)(x => myFunc(x))

或等效:

MyDelegate myDeleg = x => myFunc(x);

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

【讨论】:

  • 明确地说,这是MyDelegate myDeleg = x =&gt; myFunc(x); - 没有强制转换。
  • 哇,我不敢相信我没有想到这一点。非常感谢!
  • 为什么不只是new MyDelegate(myFunc)
  • @tymtam 可以在委托类型之间进行转换吗?我从来没有见过。
  • 是的,应该。让我们有class A { public A(D d) { d.Invoke("I'm A!"); } public delegate object D(dynamic target); }class B{ public delegate object D(dynamic target); }object F(dynamic s) { Console.WriteLine(s); return null; }Func&lt;dynamic, object&gt; f = F;。然后你可以new A(new A.D(new B.D(f)));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多