IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

FieldInfo et "fixed" dans une structure


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 89
    Points : 44
    Points
    44
    Par défaut FieldInfo et "fixed" dans une structure
    Bonjour,

    J'ai la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    unsafe public struct TEST_STRUCT
    {
       public Int32          Attr1;
       public fixed bool    Attr2[3];
    }
    Je veux parser cette structure via un FieldInfo et récupérer les types de variables et valeurs de chaque attribut...

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    unsafe
                {
                    TEST_STRUCT test;
     
                    test.Attr1 = 0;
                    test.Attr2[0] = true;
                    test.Attr2[1] = false;
                    test.Attr2[2] = true;
     
                    foreach (FieldInfo info in typeof(TEST_STRUCT).GetFields())
                    {
                        object instanceCurrent = info.GetValue(test);
     
                        Console.WriteLine("{0,50}\t:\t{1,30}\t:\t{2,5}", info.Name, info.FieldType.FullName, info.GetValue(test));
     
                        object[] attr = info.GetCustomAttributes(typeof(System.Runtime.CompilerServices.FixedBufferAttribute), false);
                        if (attr.Length > 0)
                        {
                            System.Runtime.CompilerServices.FixedBufferAttribute bufattr = (System.Runtime.CompilerServices.FixedBufferAttribute)attr[0];
                            Console.WriteLine("Member '{0}' is a fixed buffer with {1} elements of {2}", info.Name, bufattr.Length, bufattr.ElementType);
                        }
                    }
                }
    J'y arrive facilement sur un attribut de type bool : je récupère le FieldInfo suivant : {Type : Int32, Name : Attr1} et le getValue fonctionne...

    Par contre pour un tableau, j'ai le souci suivant : je récupère le FieldInfo suivant : {Type : <Attr2>e__FixedBuffer0, Name : : Attr2}...

    J'arrive à choper le type du tableau avec un GetCustomAttributes(...) mais je ne sais pas comment faire pour récupérer les valeurs de chaque indice du tableau.

    Sauriez vous le faire ?

    Merci.

    Pascal

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je ne sais pas trop comment marche l'unsafe en c#, mais je suppose que cela ressemble plus à du c++ qu'autre chose.
    Comme tu as le type du tableau, ne peux tu pas créer un pointeur sur celui-ci, et parcourir le tableau jusqu'à la fin ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 89
    Points : 44
    Points
    44
    Par défaut
    Merci, je vais creuser cette piste...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 89
    Points : 44
    Points
    44
    Par défaut
    Problème : je n'arrive pas à récupérer l'adresse du tableau à partir du FieldInfo...

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    arf, sans l'adresse difficille d'initialiser le pointeur

    Désolé mais mes connaissances en ce qui concerne l'unsafe en C# sont très limité.
    Je passe la main à quelqu'un d'autre (mis qu'il me la rende assez vite, j'en ai besoin pour répondre aux questions sur le forum )

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/06/2010, 17h02
  2. Réponses: 5
    Dernier message: 15/03/2010, 12h22
  3. [vbnet 1.1]Inserer deux simple quote sans texte dans une db
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/03/2007, 08h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo