У меня есть модель DealModel в которой есть кастомные свойства по типу CustomInt, CustomDate, CustomDecimal и.т.д
В базовом классе от которого наследуются кастомные свойства есть метод bool IsModified()
Нужно написать метод в котором будут вытянуты все свойства модели и вызван метод базового класса. Если, какое то свойство вернет true - то вернуть true, если все свойства вернули false - тогда вернуть false
public bool IsAnyFieldChanged(DealModel entity)
{
bool isModified = false;
// получаю список всех полей в моделе
var fields = entity.GetType().GetProperties();
foreach (var field in fields)
{
// а как быть тут?
}
return isModified;
}
Не все поля, а поля, тип которых унаследован от определённого класса.
Так что
var fields = entity.GetType().GetProperties();
меняем на
var props = bar.GetType()
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(x=> x.PropertyType.BaseType == typeof(BaseFoo));
Тут мы получим все публичные свойства экземпляра, значения которых имеют тип, унаследованный от базового (типы указываю по примеру из фиддла).
Дальше всё просто - получаем значение, свойство приводим к базовому, проверяем на IsModified:
foreach (var prop in props)
{
if (((BaseFoo)prop.GetValue(bar)).IsModified())
changed = true;
}
Фиддл: https://ideone.com/tEEZ3W
Если всё так, как я думаю, и у вас не наследование, а generic-типы, то получение свойств меняем на:
var props = bar.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(x => x.PropertyType.IsGenericType
&& x.PropertyType.GetGenericTypeDefinition()==typeof(Foo<>) );
Тут мы получим все публичные свойства экземпляра, реализующиее определённый generic-класс. А проверка на изменение, соответственно, будет выглядеть как:
foreach (var prop in props)
{
if ((bool)(prop.PropertyType.GetMethod("IsModified")
.Invoke(prop.GetValue(bar), new object[] { })))
changed = true;
}
Фиддл: https://ideone.com/Td2M4T
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости