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 :

[C# 2.0] Comment récupérer le "Type" de List<Obj> ?


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 160
    Points : 92
    Points
    92
    Par défaut [C# 2.0] Comment récupérer le "Type" de List<Obj> ?
    Bonjour j'ai une methode qui me retourne des objets de type List<SuperObj>
    SuperObj est ma superClass.
    J'ai d'autre Objet SousObj1, SousObj2 qui herite de cette classe.

    Ma Methode me retourne donc des objets de Type List<SousObj1> ou List<SousObj2> etc ...

    J'aimerai instancier dynamiquement un autre objet en recuperer mes types d'objets de ma liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SuperObj Obj = (SuperObj)Activator.CreateInstance(MonType);
    Or Mon Type est de type :
    - SuperObj {Name = "List`1" FullName = "System.Collections.Generic.List`1[[SuperObj, SuperObjPrj, Version=1.0.2349.30857, Culture=neutral, PublicKeyToken=null]]"} System.Type {System.RuntimeType}

    Comment recuperer le type qui "est" dans ma list ?
    Merci

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    typeof(MonType)


  3. #3
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par Morpheus
    typeof(MonType)

    bah le typeof(montype)

    me donnera le type

    SuperObj {Name = "List`1" FullName = "System.Collections.Generic.List`1[[SuperObj, SuperObjPrj, Version=1.0.2349.30857, Culture=neutral, PublicKeyToken=null]]"} System.Type {System.RuntimeType}
    or je veux avoir le type SuperObj et non pas le type System.Collections.Generic.List


    de plus le typeof()
    demande en parametre un type et nom une variable contenant un type

    :-(

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 68
    Points : 80
    Points
    80
    Par défaut
    la méthode GetType() de ta variable instance résous pas ton problème ou bien si ça peut t'aider utiliser l'opérateur is, comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(maVariable is SuperObj)
     //Mon traitement

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par SuperB
    la méthode GetType() de ta variable instance résous pas ton problème ou bien si ça peut t'aider utiliser l'opérateur is, comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(maVariable is SuperObj)
     //Mon traitement
    oui mais le probleme c'est que l'egalité ne sera jamais vrai car le type est List de "List<XXX>"
    et je voudrais recuperer ce XXX

    :-(

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 68
    Points : 80
    Points
    80
    Par défaut
    Etant donné que tu utilises les types génériques c'est pas évident à gérer et je pense qu'il faut passer par la réflexion :

    Essaye avec les fonctions GetGenericArguments() et GetGenericParameterConstraints() ....

    un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var.GetType().GetGenericArguments().GetGenericParameterConstraints()[0].Name
    Je suis vraiment pas du tout certain mais si ça peut te mettre sur la voie

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par SuperB
    Etant donné que tu utilises les types génériques c'est pas évident à gérer et je pense qu'il faut passer par la réflexion :

    Essaye avec les fonctions GetGenericArguments() et GetGenericParameterConstraints() ....

    un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var.GetType().GetGenericArguments().GetGenericParameterConstraints()[0].Name
    Je suis vraiment pas du tout certain mais si ça peut te mettre sur la voie
    Merci j'essaye deja ca
    ...

    Merci SuperB,
    tu m'as mis sur la voie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (MonType.IsGenericType && MonType.GetGenericTypeDefinition() == typeof(List<>))
     MonType= MonType.GetGenericArguments()[0].UnderlyingSystemType;
    Attention cela ne marche que si votre List<> ne contient qu'un seule Type d'objet dedans.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/10/2004, 23h43
  2. Comment déterminer si un composant est d'un type "TMonT
    Par DanielR dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/03/2004, 19h22

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