Ну, вам нужно не только пройти по дереву выражений: вам также нужно преобразовать конечное свойство getter, с которым вы столкнетесь, в свойство setter.По сути, вы хотите найти выражение, которое действует как «цель» метода получения (т. Е. Объекта, для которого он собирается получить свойство), оценить его, чтобы получить цель, затем найти соответствующий метод установки для конечного свойства ивызовите его с целевым значением и новым значением.
Обратите внимание, что, требуя только, чтобы дерево выражений представляло «получатель», вы теряете часть безопасности во время компиляции, которую вы можете ожидать ... потому чтовызывающая сторона может передать свойство только для чтения:
SetValue(c => c.Account.Name.Length, 0); // string.Length is read-only
Другой вариант - изменить код так, чтобы вместо него лямбда-выражение представляло сеттер:
SetValue((c, value) => c.Account.Name = value, "Test");
Тогда вы бы не сталидаже не нужно дерево выражений - вы можете использовать простой делегат и просто выполнить его соответствующим образом.
К сожалению, вы на самом деле не дали нам достаточно информации о том, чего вы пытаетесь достичь, чтобы узнать, является ли этовыполнимое предложение.