How to check if object is an array of a certain type?
Solution 1
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))
Solution 2
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>());
Solution 3
The neatest and securest way to do it that found is using MakeArrayType
:
var expectedType = typeof(string);
object value = new[] {"...", "---"};
if (value.GetType() == expectedType.MakeArrayType())
{
...
}
Solution 4
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.
Related videos on Youtube
Comments
-
Allrameest almost 2 years
This works fine:
var expectedType = typeof(string); object value = "..."; if (value.GetType().IsAssignableFrom(expectedType)) { ... }
But how do I check if value is a string array without setting
expectedType
totypeof(string[])
? I want to do something like:var expectedType = typeof(string); object value = new[] {"...", "---"}; if (value.GetType().IsArrayOf(expectedType)) // <--- { ... }
Is this possible?
-
Chris Marasti-Georg about 13 yearsDo you want to know if the object was declared as a string[]. or if an object[] contains only instances of a certain type?
-