C # Как превратить все пустые списки внутри объекта в ноль - PullRequest
3 голосов
/ 07 марта 2019

Прежде всего, я знаю популярный совет, что вы должны вообще не возвращать пустые списки .Но на данный момент, из-за множества причин, у меня нет другого выбора, кроме как сделать это.

Я спрашиваю, как я перебираю через свойства объекта (возможно, через Reflection), беру любые списки, которые я могу найти, и проверяю, пусто ли оно.Если это так, то включите его в null, в противном случае оставьте его.

Я застрял со следующим кодом, который включает в себя некоторую попытку с Reflection:

private static void IfEmptyListThenNull<T>(T myObject)
{
    foreach (PropertyInfo propertyInfo in myObject.GetType().GetProperties())
    {
        if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
        {
            //How to know if the list i'm checking is empty, and set its value to null
        }
    }
}

1 Ответ

3 голосов
/ 07 марта 2019

Это должно работать для вас, просто используйте метод GetValue и приведите значение к IList, затем проверьте пустоту и установите это значение с помощью SetValue на null.

private static void IfEmptyListThenNull<T>(T myObject)
        {
            foreach (PropertyInfo propertyInfo in myObject.GetType().GetProperties())
            {
                if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
                {
                    if (((IList)propertyInfo.GetValue(myObject, null)).Count == 0)
                    {
                        propertyInfo.SetValue(myObject, null);
                    }
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...