【发布时间】:2013-03-08 15:52:29
【问题描述】:
所以我最近一直在玩动态构建表达式树,遇到了这种方法,这似乎有点奇怪。起初我想“哦,这正是我需要的”在不断地按照
var left = member is FieldInfo ? Expression.Field(instance, (FieldInfo)member) : Expression.Property(instance, (PropertyInfo)member);
var right = ...
var assign = Expression.Assign(left, right);
是的,我知道有 Expression.PropertyOrField() 调用,但它确实往返反射以按名称查找成员,因为我通常已经有 MemberInfo 实例。
所以无论如何,我认为Expression.Bind() 对我有用,但它做了一些我不太了解的事情。给定以下代码:
void Main()
{
var m = typeof(Foo).GetField("Bar");
Expression.Bind(m, Expression.Constant("")).Dump();
}
public class Foo
{
public string Bar;
}
它产生MemberAssignment 表达式Bar = ""。但是没有实例,也没有静态引用。我将如何将此表达式应用于Foo 的实例?我找不到任何使用这种方法的例子。
【问题讨论】:
标签: c# .net reflection expression expression-trees