.NET 表达式 - 属性 初始化器
.NET Expressions - Property Initializers
我试图找到一个示例,说明如何使用 .NET 表达式库来新建对象并使用 属性 初始值设定项分配属性。有人有这方面的例子吗?
基本上,我需要的表达式代码相当于:
new Foo() { Bar = "bar", Baz = 5 }
到目前为止我有 Expression.New(constructorInfo)
,但我不确定如何添加 属性 初始值设定项。
最直接的方法就是新建对象,然后分配它的每个属性。由于这涉及多个语句,因此您需要使用一个块。块中的最后一个表达式是它的 return 值。
var fooVariable = Expression.Variable(typeof(Foo));
var block = Expression.Block(new[] { fooVariable },
Expression.Assign(fooVariable, Expression.New(typeof(Foo))),
Expression.Assign(Expression.Property(fooVariable, "Bar"), Expression.Constant("bar")),
Expression.Assign(Expression.Property(fooVariable, "Baz"), Expression.Constant(5)),
fooVariable);
也可以使用Expression.MemberInit
,更准确的表示对象初始化器:
var foo = Expression.MemberInit(
Expression.New(typeof(Foo)),
Expression.Bind(typeof(Foo).GetProperty("Bar"), Expression.Constant("bar")),
Expression.Bind(typeof(Foo).GetProperty("Baz"), Expression.Constant(5)))
我试图找到一个示例,说明如何使用 .NET 表达式库来新建对象并使用 属性 初始值设定项分配属性。有人有这方面的例子吗?
基本上,我需要的表达式代码相当于:
new Foo() { Bar = "bar", Baz = 5 }
到目前为止我有 Expression.New(constructorInfo)
,但我不确定如何添加 属性 初始值设定项。
最直接的方法就是新建对象,然后分配它的每个属性。由于这涉及多个语句,因此您需要使用一个块。块中的最后一个表达式是它的 return 值。
var fooVariable = Expression.Variable(typeof(Foo));
var block = Expression.Block(new[] { fooVariable },
Expression.Assign(fooVariable, Expression.New(typeof(Foo))),
Expression.Assign(Expression.Property(fooVariable, "Bar"), Expression.Constant("bar")),
Expression.Assign(Expression.Property(fooVariable, "Baz"), Expression.Constant(5)),
fooVariable);
也可以使用Expression.MemberInit
,更准确的表示对象初始化器:
var foo = Expression.MemberInit(
Expression.New(typeof(Foo)),
Expression.Bind(typeof(Foo).GetProperty("Bar"), Expression.Constant("bar")),
Expression.Bind(typeof(Foo).GetProperty("Baz"), Expression.Constant(5)))