Sto cercando di determinare se un tipo di runtime è una sorta di tipo di raccolta. Quello che ho qui sotto funziona, ma mi sembra strano che devo nominare i tipi che credo siano tipi di raccolta in un array come quello che ho fatto.Come determinare se un tipo è un tipo di collezione?
Nel codice seguente, il motivo della logica generica è perché, nella mia app, mi aspetto che tutte le raccolte siano generiche.
bool IsCollectionType(Type type)
{
if (!type.GetGenericArguments().Any())
return false;
Type genericTypeDefinition = type.GetGenericTypeDefinition();
var collectionTypes = new[] { typeof(IEnumerable<>), typeof(ICollection<>), typeof(IList<>), typeof(List<>) };
return collectionTypes.Any(x => x.IsAssignableFrom(genericTypeDefinition));
}
Come dovrei rifattorizziamo questo codice per essere più intelligenti o più semplice?
Una cosa da tenere a mente è che di solito non si vuole prendere in considerazione 'STRING' come una collezione di' char's, anche se implementa IEnumerable ''. –
svick