0

有没有办法在事先不知道方法的情况下将方法作为参数传递?

可以Func<input, return>在不知道方法的参数/返回类型的情况下调用吗?

4

4 回答 4

6

您可以使用的最接近的方法是Delegate调用者需要选择正确的委托类型。这正是Control.Invoke使用Delegate而不是特定委托类型的原因。

或者,MethodInfo正如 HackedByChinese 所建议的那样。您应该使用哪一个取决于您要达到的目标 - 每个在不同的情况下都很有用。如果您试图描述一种方法,那么MethodInfo可能是最好的方法。如果您试图表示某种可调用操作(可以接受参数并具有返回值),那么委托可能更有用。

如果您告诉我们更多关于您想要实现的目标,我们可能会为您提供更多帮助。

于 2012-05-15T12:59:23.247 回答
4

听起来通过反射调用方法将是您感兴趣的。

请参阅MethodInfo

于 2012-05-15T12:59:06.923 回答
2

似乎您可能在这里过度工程。您应该正确查看代码中的周围基础设施,并尝试对其进行重构。

但如果你真的需要,你可以用泛型来做。现在,我不推荐这个——但是这个函数你可以用任何东西调用,你必须定义 Y 和 T 以及调用时间。

    public virtual Y MyWrapperFunction<T,Y>(Func<T,Y> func, T param)
    {
        return func(param);
    }

但请注意——泛型会给你带来各种不同的问题;)

于 2012-05-15T13:11:36.183 回答
2

您需要使用委托来执行此操作。Stackoverflow 上有几篇文章涵盖了这一点。

我建议这个,特别是 Jon Skeet 的回答

于 2012-05-15T12:59:30.143 回答