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