Sembra che tu stia facendo due domande diverse: se un tipo è un array (ad es. string[]
) o qualsiasi tipo di raccolta.
Per il primo, è sufficiente controllare property.PropertyType.IsArray
.
Per quest'ultimo, è necessario decidere qual è il criterio minimo a cui si desidera conformare un tipo. Ad esempio, è possibile verificare lo IEnumerable
non generico utilizzando typeof(IEnumerable).IsAssignableFrom(property.PropertyType)
. Puoi anche usarlo per interfacce generiche se conosci il tipo effettivo di T, ad es. typeof(IEnumerable<int>).IsAssignableFrom(property.PropertyType)
.
È possibile controllare il generico IEnumerable<T>
o qualsiasi altra interfaccia generica senza conoscere il valore di T controllando se property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName)
non è null
. Si noti che non ho specificato alcun tipo per T
in quel codice. Si può fare lo stesso per IList<T>
o di qualsiasi altro tipo che ti interessa
Per esempio si potrebbe utilizzare il seguente se si desidera controllare per il generico IEnumerable<T>
:.
public bool IsPropertyACollection(PropertyInfo property)
{
return property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName) != null;
}
Array anche implementare IEnumerable, quindi restituiranno anche true
da quel metodo.
Quindi, vuoi dire, se la proprietà è una collezione? Le cose che corrispondono al tuo commento non sono matrici. –
Probabilmente intendevi 'IEnumerable' invece di' IEnumerator'? – Groo
@ Ben: Beh, gli array corrispondono ai suoi criteri (IList e IEnumerable ), ma non tutte le cose che corrispondono ai suoi criteri sono array.:) –
Sven