For these solutions:
// ....
// (class Common)
public static void With<T>(T property, Action<T> action) {
action(property);
}
// ...
// usage somewhere ...
Person person = GetPerson();
Common.With(person, p => { p.Name = "test", p.Age = "123" });
It just seems we are aliasing the variable with "p". As solutions go, I found it easy enough to keep the variable name short, this sort of solution with a "With" generic doesn't buy any elegance.
Ideally, we'd all like to see some reworking of the syntax so the usage is similar to how initialization of multiple properties works today:
Person person = new Person() { Name = "test", Age = "123" };