Re[3]: Обнулить свойство
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.04.23 14:59
Оценка: 9 (1)
Здравствуйте, 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));
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.