だから私は最近、式ツリーを動的に構築して遊んでいて、この方法に出くわしました。これはちょっと奇妙に思えます。の行に沿ってコードを絶えず書いた後、最初は「ああ、これはまさに私が必要としているものだ」と思いました。
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
か? この方法が使用されている例は見つかりません。