我正在尝试创建一个已编译的表达式委托(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/