【发布时间】:2012-09-23 23:34:27
【问题描述】:
有没有什么方法可以使用带有表达式树的对象初始化器来创建对象的实例?我的意思是创建一个表达式树来构建这个 lambda:
// my class
public class MyObject {
public bool DisplayValue { get; set; }
}
// my lambda:
var lambda = (Func<bool, MyObject>)
(displayValue => new MyObject { DisplayValue = displayValue });
如何使用表达式树创建这个 lambda?
更新:
我自己试了一下,写了以下代码:
public static Func<bool, dynamic> Creator;
static void BuildLambda() {
var expectedType = typeof(MyObject);
var displayValueParam = Expression.Parameter(typeof(bool), "displayValue");
var ctor = Expression.New(expectedType);
var local = Expression.Parameter(expectedType, "obj");
var displayValueProperty = Expression.Property(ctor, "DisplayValue");
var returnTarget = Expression.Label(expectedType);
var returnExpression = Expression.Return(returnTarget,local, expectedType);
var returnLabel = Expression.Label(returnTarget, Expression.Default(expectedType));
var block = Expression.Block(
new[] { local },
Expression.Assign(local, ctor),
Expression.Assign(displayValueProperty, displayValueParam),
Expression.Return(Expression.Label(expectedType), local, expectedType),
returnExpression,
returnLabel
);
Creator =
Expression.Lambda<Func<bool, dynamic>>(block, displayValueParam)
.Compile();
}
但它会引发以下错误:
无法跳转到未定义的标签''。
大家可以帮帮我吗?
【问题讨论】:
-
你能阅读我的帖子:abhisheksur.com/2010/09/use-of-expression-trees-in-lamda-c.html 来生成自己吗?
-
感谢链接,这似乎是一篇很棒的文章。但不幸的是,我是一个新人,你的文章很重。你能发表你的建议吗?
标签: c# dynamic lambda expression expression-trees