Мне было интересно, есть ли более простой способ сделать что-то подобное?
public int NonNullPropertiesCount(object entity) { if (entity == null) throw new ArgumentNullException("A null object was passed in"); int nonNullPropertiesCount = 0; Type entityType = entity.GetType(); foreach (var property in entityType.GetProperties()) { if (property.GetValue(entity, null) != null) nonNullPropertiesCount = nonNullPropertiesCount+ 1; } return nonNullPropertiesCount; }
Как насчет:
public int NonNullPropertiesCount(object entity) { return entity.GetType() .GetProperties() .Select(x => x.GetValue(entity, null)) .Count(v => v != null); }
(Другие ответы объединили «выбрать значение свойства» и «проверить результат на ноль». Очевидно, это сработает - я просто хотел бы отделить два бита немного больше. Конечно, решать вам: )
Type entityType = entity.GetType(); int count = entityType.GetProperties().Count(p => p.GetValue(p, null) != null);
Ваш код в порядке, может предложить использовать Linq
entity .GetProperties() .Count(x=>x.CanRead && x.GetProperty(entity, null) != null)
И не забудьте добавить условие, что свойство имеет геттер.