我在变量中指定了类型:Type hiddenType。我需要创建一个在提到的变量中指定类型的Func<T>委托,T并分配一个方法:
var funcType = typeof(Func<>).MakeGenericType(hiddenType);
Func<object> funcImplementation = () => GetInstance(hiddenType);
var myFunc= Delegate.CreateDelegate(funcType , valueGenerator.Method);
Run Code Online (Sandbox Code Playgroud)
它不起作用-因为funcImplementation返回object而不是期望的。在运行时,它将肯定是中指定类型的实例hiddenType。
GetInstance返回值object和签名不能更改。
您可以通过手动构建表达式树并将强制转换插入到 来解决此问题hiddenType。当您构建表达式树时,这是允许的。
var typeConst = Expression.Constant(hiddenType);
MethodInfo getInst = ... // <<== Use reflection here to get GetInstance info
var callGetInst = Expression.Call(getInst, typeConst);
var cast = Expression.Convert(callGetInst, hiddenType);
var del = Expression.Lambda(cast).Compile();
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码假设GetInstance是static. 如果它不是静态的,请更改构造方式callGetInst以传递调用该方法的对象。
| 归档时间: |
|
| 查看次数: |
797 次 |
| 最近记录: |