cs_alex21
Messages postés10Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention10 juin 2007
-
10 juin 2007 à 17:29
cs_alex21
Messages postés10Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention10 juin 2007
-
10 juin 2007 à 23:53
Bonjour,
Je bute sur un problème et j'ai vraiment besoin de votre aide.
Par réflection je récupère le champ "field" de ma classe "my_class"
Si c'est un tableau il faut que je récupère son contenu pour le stocker.
Le probleme c'est que je ne connais pas à l'avance le type du tableau. Ca peut etre un tableau d'int, de string, de double..., à une ou deux dimensions, et de taille inconnu.
J'arrive à voir le type, si c'est un tableau, et le nombre de dimensions.
FieldInfo field = ....
Type my_type = field.FieldType;
bool my_array = field.FieldType.IsArray;
int my_array_rank = field.FieldType.GetArrayRank();
Si le type est "system.int32[]", par exemple, je peu récupérer le contenu
cs_niky
Messages postés168Date d'inscriptionjeudi 28 juin 2001StatutMembreDernière intervention18 octobre 20087 10 juin 2007 à 23:37
Salut,
Pour faire référence à un tableau de type quelconque, il existe un type plus générique que object[] : System.Array.
Premièrement, il faut convertir l'élément en Array par un cast. Ensuite, il est possible d'itérer dessus avec un boucle foreach. Les méthodes Length, Rank, etc. permettent de connaître les dimensions du tableau :
Array my_generic_array = (Array)field.GetValue(my_class);
foreach (object o in my_generic_array) // Itération sur le tableau (ici, les éléments sont automatiquement convertit en object)
{
Console.WriteLine(o);
}
Une autre solution (moins générique) consiste à tester le type de ton tableau :
object my_array = field.GetValue(my_class);
if (my_array is int[])
{
int[] typped_array = (int[])my_array;
// ...
}
else if (my_array is string[])
{
int[] typped_array = (int[])my_array;
// ...
}
// ...