что такое дерево выражений Linq для установки свойства объекта? - PullRequest
5 голосов
/ 08 октября 2011

Предположим, у меня есть:

class Foo {
  public int Bar { get; set; }
}
public void SetThree( Foo x )
{
    Action<Foo, int> fnSet = (xx, val) => { xx.Bar = val; };
    fnSet(x, 3);
}

Как я могу переписать определение fnSet, используя деревья выражений, например ::

public void SetThree( Foo x )
{
   var assign = *** WHAT GOES HERE? ***
   Action<foo,int> fnSet = assign.Compile();

   fnSet(x, 3);
}

1 Ответ

8 голосов
/ 08 октября 2011

Вот пример.

void Main()
{
   var fooParameter = Expression.Parameter(typeof(Foo));
   var valueParameter = Expression.Parameter(typeof(int));
   var propertyInfo = typeof(Foo).GetProperty("Bar");
   var assignment = Expression.Assign(Expression.MakeMemberAccess(fooParameter, propertyInfo), valueParameter);
   var assign = Expression.Lambda<Action<Foo, int>>(assignment, fooParameter, valueParameter);
   Action<Foo,int> fnSet = assign.Compile();

   var foo = new Foo();
   fnSet(foo, 3);
   foo.Bar.Dump();
}

class Foo {
    public int Bar { get; set; }
}

Распечатывает «3».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...