gpt4 book ai didi

c# - 使用编译表达式调用参数化构造函数

转载 作者:行者123 更新时间:2023-11-30 14:10:51 24 4
gpt4 key购买 nike

我正在尝试创建一个已编译的表达式委托(delegate)来调用采用单个参数的构造函数,但我收到以下异常:

Additional information: variable 'value' of type 'MyType' referenced from scope '', but it is not defined

代码如下:

var constructorInfo = instanceType.GetConstructors().Skip(1).First();

ParameterExpression param = Expression.Parameter(genericArgument, "value");
Delegate constructorDelegate = Expression.Lambda(Expression.New(constructorInfo, new Expression[] { param })).Compile();

我相信我收到了异常,因为参数“value”不在 Expression.Block 范围内。

如何在 Expression.Block 中限定参数和构造函数表达式的范围?

最佳答案

为了声明参数 value,您还需要在创建 Lambda 表达式时指定它(参见 Expression.Lambda 方法的 overload)。到现在为止,您只创建了一个参数化的 lambda 表达式,但没有声明表达式中使用的参数。更改您的代码应该可以解决问题:

var lambdaExpr = Expression.Lambda(Expression.New(constructorInfo, 
new Expression[] { param }),
param);
Delegate constructorDelegate = lambdaExpr.Compile();

关于c# - 使用编译表达式调用参数化构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22064755/

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