C# de l'objet de tableau
L'aide de la réflexion que j'ai un objet dont j'ai besoin pour lancer dans un objet iterable liste d'éléments (de type inconnu, feront l'objet). L'utilisation de la Montre de fenêtre, je peux voir mon objet est un tableau de quelque type qu'il m'indique le nombre d'éléments et je peux exploser l'arborescence pour voir les éléments eux-mêmes.
Tout d'abord, j'ai besoin de vérifier que l'objet passé est une sorte de tableau (peut-être la Liste, peut-être l'objet[], etc). Alors j'ai besoin de parcourir ce tableau. Cependant, je ne peux pas faire la conversion de type.
Voici comment je l'utilise (en abrégé):
private static void Example(object instance, PropertyInfo propInfo)
{
object anArray = propInfo.GetValue(instance, null);
ArrayList myList = anArray as ArrayList;
foreach (object element in myList)
{
//etc
}
}
J'ai essayé différentes distributions. Le ci-dessus ne soulève pas une exception, mais ma liste est nulle lorsque l'anArray existe réellement et contient des éléments. L'instance elle-même être sauvé est fortement typé Liste<> mais pourrait prendre un sous-ensemble limité de formes si nécessaire. Mais le but de l'exercice est que cet Exemple() la méthode ne connaît pas le type de base de la propriété.
- vous pouvez trouver le type d'objet de l'instance.GetType() et vous pouvez le comparer avec desirebale type à l'aide de
is
, par exempleif (instance.GetType() is IEnumerable)
- Nom d'affichage est maintenant de savoir comment est le mot clé qui fonctionne, ce que vous faites, il est tentant de jeter de Système.Type de Système.Collection.IEnumerable, qui ne fonctionne pas depuis que le Système.Type de ne pas implémenter cette interface. peut-être que tu voulais dire typeof(IEnumerable).IsAssignableFrom(instance.GetType())
Vous devez vous connecter pour publier un commentaire.
Casting pour une ArrayList est seulement d'aller travailler si l'objet fait est une liste de tableaux. Il l'habitude de travailler avec un Système.Tableau, ou d'un Système.Les Collections.Génériques.Liste 1 par exemple.
Je pense que ce que vous avez réellement à faire est de lancer à IEnumerable, puisque c'est votre seule exigence à boucle sur elle...
Essayez de lancer à
IEnumerable
. C'est le plus interface de base de tous les enumerables, des tableaux, des listes, etc. mettre en oeuvre.Simplement Essayer Cette
Essayez ceci:
Vous pourriez aussi avoir besoin de spécifier le type générique de la IEnumerable, selon votre situation.
Vous devriez être en mesure de le jeter aux
IEnumerable
si c'est une collection de toutes sortes (tableau, liste, etc.). AussiPropertyInfo
contient unPropertyType
de la propriété que vous pourriez utiliser pour rechercher le type réel, si vous vouliez.