Сбой, потому что аргументы To
передаются по значению.
То, что для oldValue
установлено значение "b", не означает, что a.Name
изменится вообще. В вызове To(a.Name)
выражение a.Name
оценивается как строковая ссылка, и эта ссылка передается методу по значению.
Это базовая передача параметров в C # . Просто использование замыкания не меняет этого.
Что вы можете сделать, это изменить To
метод следующим образом:
public static Action To<T>(this T newValue, Action<T> setter) where T : class
{
return () => setter(newValue);
}
затем измените вызов на:
Assign.TheValue(b).To(x => a.Name = x)();