Ich versuche festzustellen, ob ein Laufzeittyp eine Art Sammlungsart ist. Was ich unten habe funktioniert, aber es scheint komisch, dass ich die Typen nennen muss, die ich für Sammlungsarten in einem Array halte, wie ich es getan habe.Wie ermittelt man, ob es sich bei einem Typ um eine Art Sammlung handelt?
Im folgenden Code liegt der Grund für die generische Logik darin, dass ich in meiner App erwarte, dass alle Sammlungen generisch sind.
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));
}
Wie würde ich diesen Code umgestalten, um intelligenter oder einfacher zu sein?
Eine Sache im Auge zu behalten ist, dass Sie in der Regel nicht wollen, 'string' als eine Sammlung von' char's zu betrachten, auch wenn es 'IEnumerable' implementiert. –
svick