C#如何将对象内的所有空列表转换为null

时间:2019-03-07 17:38:24

标签: c# list reflection null

首先,我知道您应该avoid returning empty lists的流行建议。但是到目前为止,由于种种原因,我只能这样做。

我要问的是如何通过对象的属性(可能通过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 个答案:

答案 0 :(得分:3)

这应该为您工作,只需使用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); } } } }

Array