【发布时间】:2011-11-17 15:23:56
【问题描述】:
我正在尝试从表达式调用参数化构造函数,而不是使用默认 ctor。这是获取构造函数参数的代码:
ConstructorInfo ci = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, CallingConventions.HasThis, new[] { typeof(bool) }, new ParameterModifier[] { });
ParameterInfo[] paramsInfo = ci.GetParameters();
//create a single param of type object[]
ParameterExpression param = Expression.Parameter(typeof(bool), "il");
Expression[] argsExp = new Expression[paramsInfo.Length];
//pick each arg from the params array
//and create a typed expression of them
for (int i = 0; i < paramsInfo.Length; i++)
{
Expression index = Expression.Constant(i);
Type paramType = paramsInfo[i].ParameterType;
Expression paramAccessorExp = param;
//Expression.ArrayIndex(param, index);
Expression paramCastExp =
Expression.Convert(paramAccessorExp, paramType);
argsExp[i] = param;
}
NewExpression ci2 = Expression.New(ci, argsExp);
但如果我尝试编译 lambda 表达式,我会收到以下错误:
从范围 '' 引用的类型为 'System.Boolean' 的变量 'il',但未定义"
我错过了什么?感谢任何帮助和/或提示。
【问题讨论】:
-
谢谢你们,明天我会尝试你们的建议并告诉你们。
标签: c# reflection constructor lambda expression-trees