Как создать динамическую лямбду, чтобы использовать ее? - PullRequest
2 голосов
/ 25 ноября 2011

Я научился манипулировать динамическими лямбда-выражениями с помощью класса Expression.Однако лямбда-выражение, используемое в методе ForEach (LINQ), кажется немного другим, поскольку оно является присваиванием.

Например, сделав это:

myList.ForEach(x => x.Status = "OK") ;

обновит свойство Statusкаждого объекта в списке myList.

Как это сделать с помощью объекта Expression?Я не нашел ни одного метода в выражении для установки свойства ... Он используется только для получения значений свойств?

Ответы [ 3 ]

6 голосов
/ 25 ноября 2011

Назначение существует в деревьях выражений (см. Expression.Assign) начиная с .NET 4 (где он используется для поддержки dynamic), но не поддерживается C # компилятор, который все еще поддерживает только подлинные «выражения» для преобразования лямбда-выражений в деревья выражений.

1 голос
/ 25 ноября 2011

Я почти уверен, что Linq Expressions не поддерживает назначение.Я думаю, вам нужно написать метод с присваиванием в нем и поместить его в выражение.

Обновление : похоже, что присвоение поддерживается , начиная с .NET4. См. Ответ Джона Скита.

0 голосов
/ 25 ноября 2011

Вы можете сделать:

myList.ForEach(x =>
{
    x.Status = "OK";
});

или

Action<YourType> oSetter = x =>
{
    x.Status = "OK";
});
myList.ForEach(oSetter);
...