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 :

comment vérifier si Dictionary<String,MaClasse> est une Collection


Sujet :

C#

  1. #1
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut comment vérifier si Dictionary<String,MaClasse> est une Collection
    Bonjour,

    J'essaye depuis 2 heures de tester le type d'une propriété d'une classe.
    Je voudrais "zapper" le traitement si celle-ci est une collection.
    Je précise que ces "Collections" peuvent etre du type d'une classe perso qui hérite de Dictionnary<String,MaClasse>, List<MonAutreClasse>, Dictionnary<int,UneTroisièmeClasse>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     foreach (System.Reflection.PropertyInfo fieldInf in this.GetType().GetProperties()) {
                    if (fieldInf.PropertyType is IEnumerable) {
                    }else{
                        ChampsAttribute attribut = trouveChamps(fieldInf.Name);
                        if (attribut.InnerJoinTableClasse != null) {
                            from.Append(attribut.InnerJoinTableClasse);
                            select.Append(GetTable(fieldInf.Name));
                            select.Append('.');
                        }
                        select.Append(attribut.NomChamps);
                    }
                }
    J'ai essayé une paire de chose comme IEnumerable, ICollection,Collection, Ilist...
    Une petite idée??

    Là je m'essaye aux attributs, histoire de voir comment cela fonctionne. Et pourquoi pas dans l'espoir de faire grosso-modo la même chose qu'hibernate, à savoir définir le champs, le type, la table... d'où proviennent les données de la propriété de ma classe.
    Par cette "prouesse" cela me permettra d'avoir un code quasiment auto-géré au niveau de l'acces aux données. C'est à dire que les requêtes seront construite de façons dynamiques grâce aux annotations des propriétés.
    Je sais que cela ne sera pas chose facile, à moins qu'il existe déjà une partie de faites (je ne voudrais pas réinventer la roue). Quelqu'un connaitrait-il ce genre d'API.
    J'ai aussi découvert toute une floppée de xxxAttributes, mais les explications se font très rare voir absentes. J'aurais aimé savoir à quoi sert la classe ParameterAttributes?

    Et autre chose, vous voyez dans le code le mot clé "is". Lui existe-t-il un contraire??

    Bon j'arrete les questions, parce qu'avec ça j'aurais pu ouvrir plusieurs post.

    En tout cas merci de la lecture

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Le type de PropertyType est Type et Type n'hérite pas de IEnumerable.
    Tu auras donc toujours faux à cette condition.

    Si tu veux savoir si le type hérite de IEnumerable à partir d'un PropertyInfo, tu peux faire quelque chose comme ça :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Type interface = fieldInf.PropertyType.GetInterface("IEnumerable");
    if (interface == null)
       // Le type n'hérite pas de IEnumerable
    else
       // Le type hérite de IEnumerable

    Attention, cela ne te dira pas si le type hérite aussi de IEnumerable<T> (qui est différent de IEnumerable), mais dans ton cas, si tu n'as que des List<T> et Dictionary<TKey, TValue>, ça fonctionnera, car les deux implémentent IEnumerable.


    Si tu veux avoir le contraire de is, tu peux faire :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( !(fieldInf.PropertyType is IEnumerable) )

  3. #3
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Merci pour l'info,
    Mais je viens de me retrouver coincé par un String qui hérite lui aussi de IEnumerable. Mais je vais résoudre ça.

    Merci beaucoup.

    Post Clos

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/10/2012, 13h42
  2. Réponses: 4
    Dernier message: 06/01/2010, 20h58
  3. map<string, MaClasse<T>*> est ce possible ?
    Par julie_n3k0 dans le forum C++
    Réponses: 4
    Dernier message: 03/09/2009, 00h11
  4. Réponses: 11
    Dernier message: 27/03/2005, 15h13

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