Parece que hace dos preguntas diferentes: si un tipo es una matriz (p. string[]
) o cualquier tipo de colección. Para los primeros, simplemente marque property.PropertyType.IsArray
.
Para este último, debe decidir cuál es el criterio mínimo al que desea que se ajuste un tipo. Por ejemplo, puede buscar el IEnumerable
no genérico usando typeof(IEnumerable).IsAssignableFrom(property.PropertyType)
. También puede usar esto para interfaces genéricas si conoce el tipo real de T, p. typeof(IEnumerable<int>).IsAssignableFrom(property.PropertyType)
.
La comprobación del genérico IEnumerable<T>
o cualquier otra interfaz genérica sin conocer el valor de T se puede hacer comprobando si property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName)
no es null
. Tenga en cuenta que no especifiqué ningún tipo para T
en ese código. Puede hacer lo mismo para IList<T>
o cualquier otro tipo que le interesa
Por ejemplo, podría utilizar el siguiente si desea comprobar si el genérico IEnumerable<T>
:.
public bool IsPropertyACollection(PropertyInfo property)
{
return property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName) != null;
}
matrices también implementar IEnumerable, por lo que también devolverán true
desde ese método.
¿Quiere decir, si la propiedad es una colección? Las cosas que coinciden con tu comentario no son arreglos. –
¿Probablemente quiso decir 'IEnumerable' en lugar de' IEnumerator'? – Groo
@Ben: Bueno, las matrices coinciden con sus criterios (IList e IEnumerable ), pero no todas las cosas que coinciden con sus criterios son matrices.:) –
Sven