Problème d'accès aux champs d'un template

Résolu
Signaler
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013
-
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013
-
Bonjour,

Bon c'est peut-être impossible mais j'y accède dans le debug et pas dans le programme.... Je m'explique :

class A
{
public int a;
public A()
{
a = 1;
}
}

class XList<T> : List<T>
{
public XList()
: base()
{

}
public void F()
{
T t = this[0];
int a = t.a;
}
}

static void Main()
{
XList l = new XList();
l.Add(new A());
l.F();
}

Je veux accéder à la valeur de a dans F. Ce code ne compile pas à cause de :int a = t.a; Par contre, si je vire cette ligne alors ça compile et je peux accéder à la valeur 1 par l'objet t par le debug !!

Impossible de faire un cast A de T.... T.GetType().GetFieldInfo() me permet d'accéder au champs de l'entier a mais pas à sa valeur....
F<T>() ne marche pas....

C'est dingue qu'on puisse lire la valeur dans le debug ( sinon j'aurai arrêter ) et pas dans le programme. La solution est surement de lire la valeur durant le runtime mais je ne sais pas comment faire :p

Quelqu'un a une idée ?

Contraintes :
- Il faut faire dans F()
- Il faut utiliser les templates ( avec Object ça marche ).

2 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
24
Salut,

tu ne peux pas déclarer directement un type générique (T t = ...)
il faut que ce soit "type safe"
Essayes plutôt ceci pour ta fonction F :

public int F()
{
    int a = 0;
    if (this.Count > 0)
    {
        if (this[0] is A)
        {
            A t = this[0] as A;
            a = t.a;
        }
    }
    return a;
}


bye...
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013

Eh bien, un grand merci. Cela va me permettre de retirer 4 classes de mon projet.
Je suis loin d'être débutant, j'avais pensé à :as A; mais g cru que c'était comme un cast A. ...
Enfin bref, bien joué