【问题标题】:Using Activator.CreateInstance to create Func<T> instances使用 Activator.CreateInstance 创建 Func<T> 实例
【发布时间】:2012-02-25 22:01:33
【问题描述】:

有人知道如何动态创建Func&lt;T&gt; 实例吗?

//Create the Func type

Type funcType = typeof(Func<>).MakeGenericType(typeof(string)); 

//How do I pass a reference to the anonymous method? 

Activator.CreateInstance(funcType, () => "test");

这不会编译:

无法将 lambda 表达式转换为类型 object[],因为它不是委托类型

有人吗?

【问题讨论】:

  • 试着描述你想要达到的目标,而不是你试图如何达到它以获得更好的答案。
  • 我同意 Jamiec 的观点,因为通常在这种场景下 Expression 命名空间比硬核反射更好。
  • seesharper 你能看看这个光注入问题吗? stackoverflow.com/questions/18931955/…

标签: c#


【解决方案1】:

您需要使用表达式树:

var func = Expression.Lambda(Expression.Constant("test")).Compile();
var result = func.DynamicInvoke();

【讨论】:

    【解决方案2】:

    我不认为你可以。 This blog 以某种方式解释了这个问题。我建议你寻找另一种方法。可以改用表达式树吗?

    【讨论】:

      【解决方案3】:

      您需要一个可以转换为System.Object 的对象,为此您需要先创建一个类似Func&lt;String&gt; 的委托。所以在运行时创建Func&lt;T&gt; 对我来说毫无意义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-14
        • 1970-01-01
        • 1970-01-01
        • 2013-07-18
        • 1970-01-01
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        相关资源
        最近更新 更多