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 :

Comparaison conditionelle efficace


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Comparaison conditionelle efficace
    Bonjour

    Sans etre vraiment bloqué, j'aimerais connaitre la methode la plus astucieuse pour faire une comparaison parametrée

    Je m'explique

    L'utilisateur dispose d'un ComBo : <, >, <=, >=, =
    Et d'un Numeric textbox

    J'aimerais dans l'application faire une comparaison entre une valeur, le mode de comparaison defini dans le combo et la valeur de reference utilisateur

    Bien sur je peux faire un switch case mais je pense qu'il y a moyen de faire mieux
    Sans doute un delegate mais je n'ai jamais defini moi meme de delegate et je me sens un peu tout con devant l'obstacle

  2. #2
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    De toute manière. à une place tu sera bien obliger de faire la relation entre tes signes de comparaison "user" et les operateurs de comparaison C#.

    A mon avis, tu peux mettre tout les statagèmes en place pour encapsuler cette comparaison (ce qui est propre, SDEP), qque part, on retrouvera un switch.

    SDEP = Soit dit en passant.

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Moi je pensais definir x fonction de comparaison

    Et un delegate qui prends la fonction demandée qui sera la meme pour toute la boucle de traitement !!

  4. #4
    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
    Citation Envoyé par olibara Voir le message
    Moi je pensais definir x fonction de comparaison

    Et un delegate qui prends la fonction demandée qui sera la meme pour toute la boucle de traitement !!
    Oui, mais à un moment ou un autre tu seras bien obligé de choisir la fonction à utiliser, et pour ça tu feras un switch...

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Il y a aussi la solution de générer dynamiquement une méthode en utilisant un generateur IL, mais c'est peut-être un peu compliqué pour une comparaison

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    Pas forcément (le switch), si tu range tes delegates de fonctions de comparaison dans un tableau et que tu utilise l'index sélectionné de la combo pour récupérer le delegate à cet index du tableau...
    Mais je suis pas persuadé du gain de performance, surtout que tu n'as pas beaucoup de fonctions de comparaison.

    (c'était plus clair dans mon petit cerveau avant que je l'écrive )

  7. #7
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    On peut imaginer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    delegate bool ComparerCustom<T>(T item1, T item2);
    class Machin
    {
    public string Name;
    public ComparerCustom<int> Compareur;
    // et un constructeur qui va bien, j'ai la flemme de le mettre ici :)
    }
    List<Machin> liste = new List<Machin>();
    liste.Add(new Machin("=", delegate(int référence, int valeurUser) { return référence == valeurUser; }));
    liste.Add(new Machin("<", delegate(int référence, int valeurUser) { return référence < valeurUser; }));
    ...
    Puis binder la combo sur la liste de machins, mettre le DisplayMember qui va bien, et le résultat attendu sera égal à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (laCombo.SelectedItem as Machin).Compareur(valeurRéférence, valeurUser);
    Un bon gros switch est pas plus mal, je trouve.

  8. #8
    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
    ou avec un Dictionary<string, ComparerCustom<T>>
    la clé est l'opérateur, et la valeur le delegate à utiliser...

  9. #9
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Vous etes tous géniaux !

    Il y a plein de bonnes idées ici (a garder a chaud)

    Oui, mais à un moment ou un autre tu seras bien obligé de choisir la fonction à utiliser, et pour ça tu feras un switch...
    Mais il n'y a rien de dérangeant de l'avoir dans la validation UI


    Dans le cas qui m'occupe je voulais eviter le case dans la boucle de select qui parcours des milliers de records, d'une part et puis j'aime pas avoir plein de code dans une boucle donc tant qu'a appeller une fonction pour rendre une boucle plus lisible autant rendre la fonction la plus efficace possible !

    Donc je pense définir mes x fonctions de comparaisons

    Ensuite, lors de la validation du select je prends la valeur du combo et je cree mon delegate

    MyCompDelegate MyComp=new MyCompDelegate(fonction_adequate);


    Et dans la boucle de select j'utilise MyComp

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

Discussions similaires

  1. comparaison de 2 dates
    Par eisti dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2003, 11h33
  2. [langage] Comparaison de fichiers
    Par Jibees dans le forum Langage
    Réponses: 3
    Dernier message: 23/04/2003, 16h27
  3. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 11h49
  4. Comparaison JBuilder avec Sun ONE Studio
    Par chichos dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 13/11/2002, 15h08
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

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