Comment vérifier si l’object est un tableau d’un certain type?

Cela fonctionne bien:

var expectedType = typeof(ssortingng); object value = "..."; if (value.GetType().IsAssignableFrom(expectedType)) { ... } 

Mais comment puis-je vérifier si value est un tableau de chaînes sans définir typeof(ssortingng[]) sur typeof(ssortingng[]) ? Je veux faire quelque chose comme:

 var expectedType = typeof(ssortingng); object value = new[] {"...", "---"}; if (value.GetType().IsArrayOf(expectedType)) // <--- { ... } 

Est-ce possible?

Utilisez Type.IsArray et Type.GetElementType () pour vérifier le type d’élément d’un tableau.

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

Attention à Type.IsAssignableFrom () . Si vous souhaitez vérifier le type pour une correspondance exacte, vous devez vérifier l’égalité ( typeA == typeB ). Si vous voulez vérifier si un type donné est le type lui-même ou une sous-classe (ou une interface), vous devez utiliser Type.IsAssignableFrom() :

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

Vous pouvez utiliser des méthodes d’extension (pas que vous ayez à le rendre mais le rend plus lisible ):

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

Et puis utilisez:

 Console.WriteLine(new ssortingng[0].GetType().IsArrayOf()); 

Le moyen le plus simple et le plus sûr de le faire est d’utiliser MakeArrayType :

 var expectedType = typeof(ssortingng); object value = new[] {"...", "---"}; if (value.GetType() == expectedType.MakeArrayType()) { ... } 
 value.GetType().GetElementType() == typeof(ssortingng) 

en prime (mais je ne suis pas sûr à 100%. C’est le code que j’utilise …)

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

avec cela vous pouvez chercher List, IEnumerable … et obtenir le T.

Avez-vous réellement besoin de connaître le type de tableau? Ou avez-vous seulement besoin que les éléments soient d’un certain type?

Si ce dernier, vous pouvez simplement filtrer uniquement les éléments qui correspondent à ce que vous voulez:

 ssortingng[] ssortingngs = array.OfType(); 
 if(objVal.GetType().Name == "Object[]") 

vrai pour tableau