Teniendo en cuenta esto:¿Hay una manera general de detectar si el tipo de propiedad es enumerable?
class InvoiceHeader {
public int InvoiceHeaderId { get; set; }
IList<InvoiceDetail> LineItems { get; set; }
}
actualmente estoy usando este código para detectar si una clase tiene una propiedad de colección:
void DetectCollection(object modelSource)
{
Type modelSourceType = modelSource.GetType();
foreach (PropertyInfo p in modelSourceType.GetProperties())
{
if (p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition() == typeof(IList<>))
{
System.Windows.Forms.MessageBox.Show(p.Name);
}
}
}
¿Hay una manera general, para detectar si los Elementos de línea es un tipo enumerable ? Algunos usarán otro tipo enumerable (por ejemplo, ICollection), no un IList.
p.PropertyType.GetInterfaces(). Contiene (typeof (IEnumerable)) && p.PropertyType! = Typeof (String) o de lo contrario una propiedad String también pasará la condigion – Oleg
Note que no todos los enumerables son 'IEnumerable' Creo que cualquier cosa con una función' GetEnumerator' puede ir en una declaración 'foreach' –
Aunque puede ser un poco obvio, vale la pena señalar que una cadena también es un tipo enumerable. Si alguien quiere verificar si una propiedad es _ cualquier tipo de lista o colección, usar ICollection sería mucho más adecuado. – XtraSimplicity