Перебрать атрибут класса и подсчитать количество свойств, которые не равны нулю - PullRequest
1 голос
/ 01 декабря 2010

Мне было интересно, есть ли более простой способ сделать что-то подобное?

    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;
    }

Ответы [ 3 ]

6 голосов
/ 01 декабря 2010

Как насчет:

public int NonNullPropertiesCount(object entity)
{
    return entity.GetType()
                 .GetProperties()
                 .Select(x => x.GetValue(entity, null))
                 .Count(v => v != null);
}

(Другие ответы объединили «выбрать значение свойства» и «проверить результат на ноль». Очевидно, это сработает - я просто хотел бы отделить два бита немного больше. Конечно, решать вам: )

1 голос
/ 01 декабря 2010
Type entityType = entity.GetType();

int count = entityType.GetProperties().Count(p => p.GetValue(p, null) != null);
1 голос
/ 01 декабря 2010

Ваш код в порядке, может предложить использовать Linq

entity
  .GetProperties()
  .Count(x=>x.CanRead && x.GetProperty(entity, null) != null)

И не забудьте добавить условие, что свойство имеет геттер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...