Biorąc pod uwagę to:Czy istnieje ogólny sposób wykrywania, czy typ właściwości jest typem przeliczalnym?
class InvoiceHeader {
public int InvoiceHeaderId { get; set; }
IList<InvoiceDetail> LineItems { get; set; }
}
Obecnie używam tego kodu, aby wykryć, czy klasa ma właściwość kolekcji:
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);
}
}
}
jest jakiś ogólny sposób, aby wykryć, czy LineItems jest typem przeliczalny ? Niektórzy użyją innego przeliczalnego typu (np. ICollection), a nie IList.
p.PropertyType.GetInterfaces(). Zawiera (typeof (IEnumerable)) && p.PropertyType! = Typeof (String) lub inaczej właściwość String przejdzie przez warunki również – Oleg
Uwaga że nie wszystkie wyliczenia są "IEnumerable" Wierzę, że cokolwiek z funkcją "GetEnumerator" może faktycznie przejść w 'foreach' oświadczenie –
Chociaż może to być trochę oczywiste, warto zauważyć, że ciąg jest również typem przeliczalnym. Jeśli ktoś chce sprawdzić, czy właściwość jest typem _any_ listy lub kolekcji, użycie ICollection byłoby o wiele bardziej odpowiednie. – XtraSimplicity