gpt4 book ai didi

c# - 从反射创建通用 Func

转载 作者:太空狗 更新时间:2023-10-29 23:30:29 28 4
gpt4 key购买 nike

我在变量中指定了类型:Type hiddenType .我需要创建一个 Func<T>委托(delegate)哪里T是上述变量中​​指定的类型并分配一个方法:

var funcType = typeof(Func<>).MakeGenericType(hiddenType);
Func<object> funcImplementation = () => GetInstance(hiddenType);

var myFunc= Delegate.CreateDelegate(funcType , valueGenerator.Method);

它不起作用 - 因为 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();

注意:以上代码假设GetInstancestatic。如果它不是静态的,请更改构造 callGetInst 的方式以传递调用该​​方法的对象。

关于c# - 从反射创建通用 Func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30916280/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com