Здравствуйте, kov_serg, Вы писали:
_>Слегка нарушает принцип наименьшего удивления. Передаёшь get-тер, но неожиданно получаешь изменение данных.
Ну название метода кагбэ намекает на его функциональность. Можно и вашим способом, но тогда бы я сделал так:
public class Ref
{
public static Ref<T> Property<T, Y>(Y obj, T property, [CallerArgumentExpression("property")] string? propPath = null)
{
var propDotPos = propPath.LastIndexOf('.') + 1;
var propName = propPath.Substring(propDotPos);
var p = typeof(Y).GetProperty(propName);
return new Ref<T>(() => (T)p.GetValue(obj), v => p.SetValue(obj, v));
}
}
public class Ref<T>
{
public Func<T> get { get; private set; }
public Action<T> set { get; private set; }
public Ref(Func<T> get, Action<T> set) { this.get = get; this.set = set; }
}
С вот таким использованием:
var a = new A() { Name = "" };
SetNull(Ref.Property(a, a.Name));