A continuación se muestra un código que utilizo para obtener el estado inicial de todas las propiedades públicas en una clase para la comprobación IsDirty.Cómo saber si un PropertyInfo es una colección
¿Cuál es la forma más fácil de ver si una propiedad es IEnumerable?
Saludos,
Berryl
protected virtual Dictionary<string, object> _GetPropertyValues()
{
return _getPublicPropertiesWithSetters()
.ToDictionary(pi => pi.Name, pi => pi.GetValue(this, null));
}
private IEnumerable<PropertyInfo> _getPublicPropertiesWithSetters()
{
return GetType().GetProperties().Where(pi => pi.CanWrite);
}
ACTUALIZACIÓN
Lo que terminé haciendo fue la adición de algunas extensiones de la biblioteca de la siguiente manera
public static bool IsNonStringEnumerable(this PropertyInfo pi) {
return pi != null && pi.PropertyType.IsNonStringEnumerable();
}
public static bool IsNonStringEnumerable(this object instance) {
return instance != null && instance.GetType().IsNonStringEnumerable();
}
public static bool IsNonStringEnumerable(this Type type) {
if (type == null || type == typeof(string))
return false;
return typeof(IEnumerable).IsAssignableFrom(type);
}
Tenga en cuenta que una cadena es un IEnumerable demasiado –
resuelve el problema http://stackoverflow.com/a/40376537/5996253 –