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 dans un switch


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 6
    Par défaut Comparaison dans un switch
    salut tout le monde
    je veux executer des conditions mais sans passer par le long chemin des if et else if. Alors jai decide d'utiliser le switch mais sa ne prend pas.
    Sa me dit que j'essais deffectuer une conversion entre un double et un typ bool du coup affiche une erreur et je sais pas comment faire
    merci bien!
    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
      double betrag = 15000;
     
                switch (betrag)
                {
                    case  < 500:
     
                        Console.WriteLine("Es tut mir leid aber für diesen Einkauf bekommen Sie kein Rabatt!");
                        break;
     
                    case ( betrag >= 2000 && < 5000):
     
                        Console.WriteLine("für diesen Einkauf erhalten Sie 5% Rabatt");
                        break;
     
                    case (betrag >=500 && < 2000):
                        Console.WriteLine("Für diesen Einkauf erhalten Sie 2% Rabatt");
                        break;
     
                    case  >= 5000:
                        Console.WriteLine("Für diesen Einkauf erhalten Sie 10% Rabatt");
                        break;
                }

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 678
    Par défaut
    Bonjour,

    En effet ton switch ne veut que des valeurs de type double. Le problème c'est que :

    est une condition, qui est considérée comme un bool.

    Du coup même si tu pouvais faire ça, tu serais limité au fait qu'il n'y aurait que deux case possible : true ou false. Quelle que soit la condition.

    Il te faut passer par un if / else.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 6
    Par défaut
    Donc le c# ne le permet pas alors !!
    C’est bizarre

  4. #4
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 678
    Par défaut
    Citation Envoyé par junior1998 Voir le message
    Donc le c# ne le permet pas alors !!
    C’est bizarre
    Non il ne le permet pas je pense, et les langages ou il est possible de le faire, je lis qu'il est fortement conseillé de passer par un if / else quand même, pour la lisibilité, etc ...

    Pourquoi bizarre ? Un switch case est fait pour des cas d'utilisation très simples. Si tu as besoin de complexité, alors il te faudra passer par autre chose.

    Personnellement, j'utilise très peu, voir pas du tout les switch case, hormis si il me faut évaluer des enums.

  5. #5
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    On peut arriver à quelque chose d'approchant, en utilisant le pattern matching, qui permet de préciser une condition :

    Code C# : 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
    double betrag = 15000;
     
    switch (betrag)
    {
        case double d when d < 500:
     
            Console.WriteLine("Es tut mir leid aber für diesen Einkauf bekommen Sie kein Rabatt!");
            break;
     
        case double d when (d >= 2000 && d < 5000):
     
            Console.WriteLine("für diesen Einkauf erhalten Sie 5% Rabatt");
            break;
     
        case double d when (d >= 500 && d < 2000):
            Console.WriteLine("Für diesen Einkauf erhalten Sie 2% Rabatt");
            break;
     
        case double d when d >= 5000:
            Console.WriteLine("Für diesen Einkauf erhalten Sie 10% Rabatt");
            break;
    }

    Attention, c'est une nouveauté disponible uniquement depuis C# 7.

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 046
    Par défaut
    Ou sinon, une manière ressemblante réalisable à partir du framework 3.5

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Double number = 2018;
     
    var choices = new Dictionary<Func<Double, Boolean>, Action>
    {
        { x => x < 500 , () => Console.WriteLine("0-499") },
        { x => x < 2000 , () => Console.WriteLine("500-1999") },
        { x => x < 5000 , () => Console.WriteLine("2000-4999") },
        { x => x < Double.MaxValue , () => Console.WriteLine("5000+") }
    };
     
    choices.First(it => it.Key(number)).Value();

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par PixelJuice Voir le message
    Pourquoi bizarre ? Un switch case est fait pour des cas d'utilisation très simples. Si tu as besoin de complexité, alors il te faudra passer par autre chose.
    j'aurais tendance à dire non
    le switch de c# est fait pour des cas d'utilisation très simple, mais dans d'autres langages pas forcément
    en vb.net on peut faire
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select case true ' conditions volontairements hétéroclites pour montrer l'étendue (non exhaustive)
      case d > 50 andalso d < 200
      case typeof var3 is IMachin
      case coll.firstordefault(condition …) isnot Nothing
      case MaFctQuiReturnUnBool(var4)
    end select
    et parfois c'est bien pratique de pouvoir faire des choses complexes avec peu de code qui plus est lisible (en plus vb.net n'a pas besoin de break à chaque case)
    le switch par typage de c# amène un peu de souplesse et c'est déjà bien mais pas encore assez je pense ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. opérateur de comparaison dans un switch
    Par new_wave dans le forum Langage
    Réponses: 2
    Dernier message: 08/12/2008, 11h28
  2. Position de default et case dans un switch
    Par Glutinus dans le forum C
    Réponses: 16
    Dernier message: 11/09/2006, 23h17
  3. Problème dans un "switch"
    Par belzeluc dans le forum C++
    Réponses: 4
    Dernier message: 04/06/2006, 13h13
  4. Une boucle for dans un switch case?
    Par Death83 dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2006, 15h05
  5. Réponses: 27
    Dernier message: 12/01/2006, 12h04

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