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 :

Noms dynamiques pour des propriétés


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut Noms dynamiques pour des propriétés
    Bonjour

    Je voudrais écrire une fonction générique de controle de validité de dates. Pour faire court, par exemple verifier que datedeb<=datefin.

    Le controle serait effectué sur toutes les occurences d'une liste passée en paramètre.

    Mon souci est que les objets de type liste qui existent dans mon appli n'ont pas tous des propriétés qui s'appellent "datedeb" et "datefin", ca peut ausis etre "datedebut" par exemple.

    Du coup je pensais passer en parametre le nom des propriétés, mais comment ensuite l'utiliser pour faire les contrôles ?

    Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void TestDates ( List<T> l, string pNomDatedeb , string pNomDateFin)
    {
      l[0].???? // comment utiliser ici le nom de la propriété obtenu en parametre ?
    }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 209
    Par défaut
    euh le mieux c'est de renommé tes propriétés correctement

    De faire implémenter par tes objets une Interface

    ou sinon tu peux tester d.GetType().GetProperty("propertyName").GetValue(d, null); mais je pense que c'est très couteux en performance

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    euh le mieux c'est de renommé tes propriétés correctement
    mmmmouais, j'y ai pensé mais c'est un peu lourd pour si peu, et on aurait pas de certitude qu'un développeur par la suite n'utilise pas le nom de propriété qu'il faut.

    De faire implémenter par tes objets une Interface
    Là ca me parle plus, ca oblige effectivement à avoir le meme nom partout, meme si ca oblige à renommer l'existant

    ou sinon tu peux tester d.GetType().GetProperty("propertyName").GetValue(d, null); mais je pense que c'est très couteux en performance
    Je vais le tenter qd meme, pour voir

    Merci

  4. #4
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Je confirme. A part avec de la réflexion, tu ne pourras pas procéder ainsi.

    Et la réflexion ça peut être coûteux en performance. Vu que tu le fais en "dynamique", je dirais que ça peut l'être particulièrement dans ton cas. Mais selon tes attentes, ça peut malgré tout répondre à ton problème.

    Cependant, on ne fait pas de la réflexion pour éviter d'avoir à faire un refactoring du code... donc je te conseillerai d'écouter la remarque de BenoitM.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Je confirme. A part avec de la réflexion, tu ne pourras pas procéder ainsi.

    Et la réflexion ça peut être coûteux en performance. Vu que tu le fais en "dynamique", je dirais que ça peut l'être particulièrement dans ton cas. Mais selon tes attentes, ça peut malgré tout répondre à ton problème.

    Cependant, on ne fait pas de la réflexion pour éviter d'avoir à faire un refactoring du code... donc je te conseillerai d'écouter la remarque de BenoitM.
    Salut. N'étant pas expert, je me doute que quand tu parles de "réflexion" ce n'est pas le sens commun mais que ca désigne qqchose de précis dans le cas qui nous occupe, ca désigne le GetProperty ?

    Pour ce qui est de ta remarque générale, je suis d'accord .... mais il faut aussi voir le cout de ce refactoring (et de tous les tests à refaire qui vont avec), des délais imposés, des dispos des testeurs, etc ... Malheureusement on est pas toujours dans les situations idéales où l'on peut faire tout comme on aimerait, sinon j'aurais déjà opté pour la réécriture du code.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 209
    Par défaut
    Avec visual studio 2010 renommer(champ,propriétés,fonction) est assez facile et marche plutot bien

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    Tout a fait vrai, je m'en sers parfois.

    Faut juste que j'arrive à vendre le truc au niveau des chefs de projets, car il faudra tout retester (ils sont pointilleux là dessus)

    Merci à vous.

  8. #8
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Citation Envoyé par Loko Voir le message
    Salut. N'étant pas expert, je me doute que quand tu parles de "réflexion" ce n'est pas le sens commun mais que ca désigne qqchose de précis dans le cas qui nous occupe, ca désigne le GetProperty ?
    En gros, la réflexion d'une manière générale est lente (GetProperty, GetMethod, ...) même s'il existe des moyens de contournement, notamment via les délégués.

    Citation Envoyé par Loko Voir le message
    Pour ce qui est de ta remarque générale, je suis d'accord .... mais il faut aussi voir le cout de ce refactoring (et de tous les tests à refaire qui vont avec), des délais imposés, des dispos des testeurs, etc ... Malheureusement on est pas toujours dans les situations idéales où l'on peut faire tout comme on aimerait, sinon j'aurais déjà opté pour la réécriture du code.
    Crois moi, je sais très bien de quoi tu parles.
    Mais il aussi prendre en compte dans le calcul que ce problème "basique" t'en causera d'autre à l'avenir. Et que refactoriser le code de temps en temps t'évitera bien des désagréments si l'application a encore de longs jours devant elle.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    bonjour

    J'ai donc créé une interface qui impose des propriétés nommées "dateDeb" et "dateFin", entre autres.

    J'ai écris une méthode de controle de dates qui prend en paramètre une liste d'objets implémetant cette interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static Boolean CheckDates ( List<IIsDateCheckable> liste, bool pAllowStartEqualsEnd, bool pAllowOverlap, bool pAllowHolesInDates, bool pAllowInsertBefore)
                    { ...
    J'ai une erreur lorsque je veux appeler cette méthode avec une liste d'objets qui pourtant implémentent bien l'interface :

    Opera.BL.ControleurDates.CheckDates(TSession.Instance.LiensUsinePF, ...

    Argument 1: cannot convert from 'System.Collections.Generic.List<Opera.DTO.Modifications.MdlModificationLiensUsinePF>' to 'System.Collections.Generic.List<Opera.BL.IIsDateCheckable>'
    J'ai essayé avec un cast, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheckDates((List<IIsDateCheckable>)TSession.Instance.LiensUsinePF,
    mais le cast n'est pas accepté.

    Est ce que j'ai oublié qqchose, ou bien est ce que l'interface est une fausse bonne idée ?

    Merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/03/2013, 11h44
  2. Réponses: 1
    Dernier message: 30/09/2011, 15h14
  3. [MySQL] Quel nom choisir pour des type radio dynamique ?
    Par bullrot dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/10/2008, 15h06
  4. [FLASH MX] Un menu dynamique pour des vidéos .flv
    Par Edoxituz dans le forum Flash
    Réponses: 10
    Dernier message: 12/02/2006, 16h46
  5. Réponses: 8
    Dernier message: 19/04/2005, 13h04

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