Re: Обнулить свойство
От: 4058  
Дата: 28.04.23 04:25
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>SetNull принимает поля, но не св-ва или индексаторы.

vaa>Возможно ли что-то похожее для св-в чтобы сократить кол-во ифчиков?

vaa>
vaa>class A
vaa>{
vaa> public string Name {get;set;}
vaa>}
vaa>void SetNull(ref string v) => if (v == "") v = null;
vaa>SetNull(ref a.Name);
vaa>


Если не важна производительность и типобезопасность, то можно подобное сделать через рефлексию, например:

void SetNullProperty(string input, object target, string propertyName)
{
    if (input == string.Empty) SetPropertyValue(null, target, propertyName);
}

void SetPropertyValue(object input, object target, string propertyName)
{
    target.GetType().GetProperty(propertyName).SetValue(target, input);
}

SetNullProperty("", a, "Name");


Основная проблема заключается в том, что для решения данной задачи без рефлексии, нужно иметь возможность получить делегат на setter формируемый свойством, а такой возможности нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.