Итак, я играл с динамическим построением деревьев выражений в последнее время и наткнулся на этот метод, который кажется странным. Сначала я подумал: "О, круто, это именно то, что мне нужно" после постоянного написания кода по строкам
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
? Я не могу найти пример использования этого метода.