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

Framework .NET Discussion :

Récupérer le Nom d'une propriété.


Sujet :

Framework .NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Récupérer le Nom d'une propriété.
    Bonjour à tous.

    J'aimerais récupérer le nom d'une property d'un objet dans le code.

    Avec reflection on peut récupérer une property via le nom, mais ce qui m’intéresse est le procédé inverse.

    Pour quoi faire ?

    Et bien c'est simple les combobox ont une propriété DisplayMember et j'aimerais plutôt avoir la possibilité d'éviter de renseigner cette propriété en ecrivant manuellement le nom de la propriété.

    Ceci permettrait d'éviter les erreurs de frappe (bien que ça se voit assez rapidement lors du premier test) mais surtout de pouvoir profiter du refactor quand quelqu'un s'amuse à changer le nom d'une propriété et éviter d'aller chercher partout où ce texte doit être modifié.

    Si quelqu'un à la moindre idée, je suis preneur !

    Cordialement,

    Vincent

  2. #2
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Salut,

    A partir de visual studio 2012, tu as la possibilité d'utiliser les CallerMember http://msdn.microsoft.com/query/dev1...-.NETFramework
    qui remplissent ce rôle.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  3. #3
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Tu peux utiliser une méthode comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    using System.Linq.Expressions;
     
    ...
     
     
    static string GetPropertyName<T>(Expression<Func<T>> expression)
    {
        var memberExpr = expression.Body as MemberExpression;
        if (memberExpr == null)
            throw new ArgumentException("L'expression ne représente pas l'accès à une propriété");
        return memberExpr.Member.Name;
    }
    Et l'utiliser comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string name = GetPropertyName(() => myObject.MyProperty); // renvoie "MyProperty"

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Merci pour vos réponses.

    Pour les callerMember je pense pas que ce soit adapté car il faut que la propriété soit l'appelant de la fonction qui me donnera le nom, ça pourrait marcher sur les propriétés objets auxquels je pourrais ajouter une fonction GetName par exemple qui prendrait ce paramètre callerMember mais pour toutes les propriétés en type simple a moins de surcharger ces types... mais je le note quand même car il peut être utile dans d'autres cas (sans compter que je suis sous le framework 3.5 et non 4.5 mais bon ça c'est encore autre chose )

    @tomlev : ca marche parfaitement, un peu galérer pour transformer en VB masi c'est bon :p

    thanks dudes !

  5. #5
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    En VB.NET :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Imports System.Linq.Expressions
     
    ...
     
     
    Shared Function GetPropertyName(Of T)(ByVal expression As Expression(Of Func(Of T))) As String
        Dim memberExpr = TryCast(expression.Body, MemberExpression)
        If memberExpr Is Nothing Then
            Throw New ArgumentException("L'expression ne représente pas l'accès à une propriété")
        End If
        Return memberExpr.Member.Name
    End Function

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim name As String = GetPropertyName(Function() myObject.MyProperty) ' renvoie "MyProperty"

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Yep, j'avais fini par trouver

    merci encore c'est perfecto.

    (Un peu dommage quand même que ce genre d'info ne soit pas accessible directement... m'enfin)

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

Discussions similaires

  1. récupérer le nom d'une propriété d'un objet
    Par bakman dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 02/09/2010, 15h20
  2. Récupérer le nom d'une propriété
    Par faabriice dans le forum C#
    Réponses: 1
    Dernier message: 12/02/2009, 15h20
  3. Récupérer le nom d'une propriété
    Par Tchupacabra dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/06/2007, 16h21
  4. [Debutant] Récupérer le nom d'une image
    Par Djoul dans le forum Débuter
    Réponses: 4
    Dernier message: 30/05/2005, 09h52
  5. Récupérer le nom d'une base
    Par nic_moq dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/03/2004, 10h50

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