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 :

Voyage dans les propriétés


Sujet :

C#

  1. #1
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut Voyage dans les propriétés
    bonjour,
    j'ai une question qui j'espère trouvera réponse

    imaginons une classe A avec les propriétés suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ...
            [Category("Customer info")]
            [XmlAttribute()]
            public string BP{ get; set;}
     
            [Category("Customer info")]
            [XmlAttribute()]
            public string INST{ get; set;}
     
            [Category("Chose")]
            [XmlAttribute()]
            public string COCO { get; set;}
    ...
            }
    Comment pourrais-je lui demander

    pour chaque propriétés de la catégorie "Customer info", fait quelque chose.

    j'ai une idée mais pas bonne... sinon, je ne serais pas ici pour vous poser la question

    merci

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Le seul moyen ici, c'est la Reflection

  3. #3
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    justement je suis en plein dedans!

    euh oui bon elle était nulle celle là!

    Reflection d'accord!
    mais encore???

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 184
    Points : 4 501
    Points
    4 501

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    un début de code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ClassA A = new ClassA();
    PropertyInfo[] properties = A.GetType().GetProperties();
    foreach (PropertyInfo p in t.GetProperties())
    {
    p.Name;
    p.GetValue(o, null));
    }

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    En utilisant Linq et la méthode d'extension GetAttribute de la lib Dvp.NET :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        var properties = from p in typeof(TaClasse).GetProperties()
                         let attr = p.GetAttribute<CategoryAttribute>()
                         where attr != null && attr.Category == "Customer info"
                         select p;
     
        foreach (PropertyInfo p in properties)
        {
            ...
        }
    Si tu veux pas utiliser Dvp.NET, tu peux aussi te faire une méthode d'extension comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static class Extensions
    {
        public static string GetCategory(this MemberInfo member)
        {
            return member.GetCustomAttributes(typeof(CategoryAttribute), true)
                         .Cast<CategoryAttribute>()
                         .Select(a => a.Category)
                         .FirstOrDefault();
        }
    }
    Et tu l'utilises comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        var properties = from p in typeof(TaClasse).GetProperties()
                         where p.GetCategory() == "Customer info"
                         select p;

  7. #7
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Bonjour,

    d'abord, merci à tous de vous êtes penché sur mon problème.

    J'en ai retiré beaucoup de choses, donc, c'est chouette

    Grace à ça, j'ai pu mettre en place ce que je voulais.

    comme ceci :
    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
    25
    26
     
            public bool Passed
            {
                get
                {
                    bool result = true;
                    PropertyInfo[] proper = this.GetType().GetProperties();
                    foreach (PropertyInfo item in proper)
                    {
                        foreach (object o in item.GetCustomAttributes(typeof(CategoryAttribute),false))
                        {
                            if ((o as CategoryAttribute).Category == "Customer info")
                            {
                                object test = this.GetType().GetProperty(item.Name).GetValue(this, null);
                                if (test==null||test==string.Empty)
                                {
                                    result = false;
                                    break;
                                }
                            }
                        }
                        if (!result) break;
                    }
                    return result;
                }
            }
    néanmoins, était ce la la meilleure manière?, si jamais quelqu'un àç un truc a dire sur le code, qu'il se lache

    je note aussi que la solution de tomlev m'a l'air très élégante.
    a tester aussi donc

    encore merci

Discussions similaires

  1. Java ecrire dans les propriétés d'un document word
    Par nawara3003 dans le forum Général Java
    Réponses: 3
    Dernier message: 22/02/2011, 22h27
  2. #define dans les propriétés du projet ?
    Par Colbix dans le forum Eclipse C & C++
    Réponses: 2
    Dernier message: 18/03/2009, 10h27
  3. Option Sécurité dans les propriétés des fichiers?
    Par kirout dans le forum Windows XP
    Réponses: 2
    Dernier message: 12/02/2008, 22h19
  4. Réponses: 5
    Dernier message: 28/11/2006, 09h51
  5. Informations sur un exe (dans les propriétés windows)
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 06/07/2004, 18h20

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