У меня есть модель 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
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как в Bitmap оставить только необходимые цвета пикселей, а остальные превратить, например, в чёрный цвет?
Создал свой User Control элементРасставил и настроил там элементы как они должны располагаться, растягиваться
Cуть проблемы в том что у меня есть три usercontrol-а для трех фигур, два из них отображаются, а один нет(обведен красным, в контроле должно быть видно...