【问题标题】:Converting any delegate to delegate with object[] parameter使用 object[] 参数将任何委托转换为委托
【发布时间】:2018-04-26 18:02:31
【问题描述】:

我想转换任何返回的委托,例如 bool,其中第一个参数是 MyClass 类型,其他参数可以转换为 object,例如

bool FirstMethod(MyClass foo, int integer, string text)
bool SecondMethod(MyClass foo, string text, AnotherClass bar)

Func<MyClass, object[], bool>,所以MyClass之后的参数会被推送到对象数组中。
这有可能吗?

【问题讨论】:

  • 你试过了吗?发生了什么?
  • 委托有一些无效参数的错误 - 我现在没有那个代码,几天前我删除了,但我想我必须有那个
  • 您能否至少指定您想要实现的方法的签名?您将如何将 FirstMethod 传递给此方法?通过委托的实例?这个实例如何获取?

标签: c# .net object delegates func


【解决方案1】:

你手里有一个:

delegate bool FirstMethod(MyClass foo, int integer, string text);

并且您希望编写一个转换方法,采用其中一个并返回

Func<MyClass, object[], bool>

这很简单:

static Func<MyClass, object[], bool> Convert(FirstMethod f) =>
  (m, o) => f(m, (int)o[0], (string)o[1]);

完成。只需为您必须转换的每种委托类型执行此操作即可。

如果您愿意,您甚至可以将其作为扩展方法。

【讨论】:

  • 我必须存储任何返回 bool 的委托,第一个参数 MyClass 在相同的变量类型中
  • @TheChilliPL:对,所以对于每一个,写上面的方法。就一行代码。
  • 每一个?它有无数个。对象甚至可以是自定义的类参数,并且参数数量不是有限的
  • @TheChilliPL:听起来很像你有一个 XY 问题。那就是:你有一些问题要解决,你对如何解决它有一个错误的想法,现在你很难实施那个错误的想法。你真正想解决什么问题?
猜你喜欢
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多