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 :

Comment faire un switch sur un Type


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut Comment faire un switch sur un Type
    Bonjour,
    Je souhaiterais mettre dans un winform, ou plutot dans le controleur, un méthode privé qui s'occupera de traiter les exceptions.
    A l'intérieur je voudrais faire un switch sur le type de l'exception (xyzException, abcException....). Mais je ne trouve pas la syntaxe concernant le switch.
    voila ce que j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private void GestionException(Exception e) {
                switch (e.GetType()) {
                    case typeof(StoreProcException):
                        if (MessageBox.Show(e.Message + "\nVoulez-vous la recréer?", e.GetType().ToString(), MessageBoxButtons.YesNo) == DialogResult.Yes)
                            CreerTable.creerStoreProcManquante(((StoreProcException)e).NomStoreProcManquante);
                        break;
    .......
                    default:
                        break;
     
                }
            }
    Avec ce code, cela ne veut pas compiler, déjà au niveau du switch (la valeur d'un type intégral est attendue). Et au niveau du case (une valeur de constante est attendue).

    J'ai essayé les Type.getType(e),typeof(e), Type.GetTypeCode(StoreProcException)..., sans succès.
    J'ai chercher sur la toile, et en appliquant les codes proposés cela ne fonctionne pas.

    Quelqu'un aurait-il un idée?
    Merci

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Le mot clé switch ne fonctionne qu'avec des valeurs intégrales (chaînes de caractères, entiers, énumérations).

    Pour faire ce que tu veux, utilise le mot clé is.

  3. #3
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut
    OOk,

    donc je suis condamné à faire des if en cascade, et n'utiliser le if que pour des enum, entier, string.

    Merci

  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 : 44
    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
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Le mot clé switch ne fonctionne qu'avec des valeurs intégrales (chaînes de caractères, entiers, énumérations).
    Techniquement, string n'est pas un type intégral... mais il est aussi supporté par switch

    Citation Envoyé par touftouf57 Voir le message
    donc je suis condamné à faire des if en cascade
    Ben si tu fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (e is StoreProcException)
    {
        ...
    }
    else if (e is AutreException)
    {
        ...
    }
    else
    {
        ...
    }
    C'est pas tellement plus lourd à écrire qu'un switch...

  5. #5
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut
    Tu as tout as fait raison. Et c'est vrai que niveau "écriture" ça se tiens.

    Mais au départ je pensais qu'on pouvait switcher sur le type. Je suis passé par les if et c'est ok.

    Merci.

  6. #6
    Membre éprouvé
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Par défaut
    Bonjour,


    y a une solution de contournement pour pouvoir utiliser l swich, c'est le faite d'appeler le tostring() du Type et l comparer avec l tostring du typeof

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    swich (e.GetType().ToString()){
     
    case typeof(montype).ToString():
     
    break;
     
     
    }

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

Discussions similaires

  1. [SOAP] Comment faire une requête sur un type concret ?
    Par verbose dans le forum Services Web
    Réponses: 1
    Dernier message: 17/06/2010, 13h57
  2. Comment faire une interface de ce type....
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 6
    Dernier message: 30/04/2007, 13h50
  3. Réponses: 1
    Dernier message: 09/11/2006, 12h08
  4. [VB.NET] [PPC] Comment faire un formulaire sur pls pages?
    Par papy27 dans le forum Windows Mobile
    Réponses: 10
    Dernier message: 03/06/2004, 17h23
  5. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31

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