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

Résolu
thristam Messages postés 23 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 28 mars 2013 - 27 mars 2013 à 19:32
thristam Messages postés 23 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 28 mars 2013 - 28 mars 2013 à 06:22
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

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
27 mars 2013 à 21:58
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...
3
thristam Messages postés 23 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 28 mars 2013
28 mars 2013 à 06:22
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é
0
Rejoignez-nous