How to check if object is an array of a certain type? How to check if object is an array of a certain type? arrays arrays

How to check if object is an array of a certain type?


Use Type.IsArray and Type.GetElementType() to check the element type of an array.

Type valueType = value.GetType();if (valueType.IsArray && expectedType.IsAssignableFrom(valueType.GetElementType()){ ...}

Beware the Type.IsAssignableFrom(). If you want to check the type for an exact match you should check for equality (typeA == typeB). If you want to check if a given type is the type itself or a subclass (or an interface) then you should use Type.IsAssignableFrom():

typeof(BaseClass).IsAssignableFrom(typeof(ExpectedSubclass))


You can use extension methods (not that you have to but makes it more readable):

public static class TypeExtensions{    public static bool IsArrayOf<T>(this Type type)    {         return type == typeof (T[]);    }} 

And then use:

Console.WriteLine(new string[0].GetType().IsArrayOf<string>());


value.GetType().GetElementType() == typeof(string)

as an added bonus (but I'm not 100% sure. This is the code I use...)

var ienum = value.GetType().GetInterface("IEnumerable`1");if (ienum != null) {    var baseTypeForIEnum = ienum.GetGenericArguments()[0]}

with this you can look for List, IEnumerable... and get the T.