I am trying to determine if a runtime type is some sort of collection type. What I have below works, but it seems strange that I have to name the types that I believe to be collection types in an array like I have done.
In the code below, the reason for the generic logic is because, in my app, I expect all collections to be generic.
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)); }
How would I refactor this code to be smarter or simpler?
To do this task, we use the IsArray property of the Type class. This property is used to determine whether the specified type is an array or not. IsArray property will return true if the specified type is an array. Otherwise, it will return false.
Really all of these types inherit IEnumerable
. You can check only for it:
bool IsEnumerableType(Type type) { return (type.GetInterface(nameof(IEnumerable)) != null); }
or if you really need to check for ICollection:
bool IsCollectionType(Type type) { return (type.GetInterface(nameof(ICollection)) != null); }
Look at "Syntax" part:
List<T>
IList
ICollection
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With