我希望能够建立类似下面的委托表达式:如何在“sub”表达式中使用lambda表达式参数?
Func<object[], object> createSomeType1 = (args) =>
{
return new SomeType1((P1)args[0], (P2)args[1], (P3)args[2]);
};
我刚开始学习手工制作的表达式,所以原谅我,如果这是一个相当简单的问题(或者说我误解东西)。
我知道,创建具有正确类型的构造,我会做到以下几点:
var p1 = Expression.Parameter(typeof(P1));
var p2 = Expression.Parameter(typeof(P2));
var p3 = Expression.Parameter(typeof(P3));
var someType1Exp = Expression.New(constructorInfo, p1, p2, p3);
然后我知道了“外”拉姆达是,我认为,声明如下:
Expression<Func<object[], object>>.Lambda<Func<object[], object>>(
someType1Exp,
Expression.Parameter(typeof(object[])));
我在包装我的头时遇到了麻烦,如何从外部表达式将参数“传递”到内部表达式,然后将其转换为正确的类型。
任何暗示正确的方向表示赞赏。
添加完整的示例使用内部/外部lambd一个;实际上你并不需要这么做 - 你可以直接在一个lambda中做。 – 2010-11-09 21:09:24