Có cách nào để tạo một thể hiện của một đối tượng với bộ khởi tạo đối tượng bằng một cây biểu thức không? Ý tôi là tạo một Cây Biểu hiện để xây dựng lambda này:Biểu thức để tạo một thể hiện với đối tượng khởi tạo
// my class
public class MyObject {
public bool DisplayValue { get; set; }
}
// my lambda:
var lambda = (Func<bool, MyObject>)
(displayValue => new MyObject { DisplayValue = displayValue });
Làm cách nào để tạo lambda này với cây Biểu thức?
UPDATE:
Tôi tryed bản thân mình và viết mã sau:
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();
}
Nhưng nó ném các lỗi sau:
Cannot jump to undefined label ''.
tất cả mọi người có thể giúp tôi xin vui lòng?
Bạn có thể đọc bài đăng của tôi: http://www.abhisheksur.com/2010/09/use-of-expression-trees-in-lamda-c. html để tạo ra chính mình? – abhishek
Nhờ liên kết, nó có vẻ là một aricle greate. Nhưng tiếc là tôi là một anh chàng mới trong biểu hiện và bài viết của bạn rất nặng. Bạn có thể gửi đề nghị của bạn được không? –