Page d'Accueil

Commutateurs case

 

Introduction

En définissant une expression dont le résultat mènerait à une exécution du programme spécifique, l'énoncé switch C# Collections- A Collection des articles considère ce résultat et exécute un énoncé basé sur les résultats possibles de cette expression, ces résultats possibles s'appellent case ( cas). Les différents résultats sont énumérés dans le corps de l'énoncé switch et chaque case a sa propre exécution, au besoin. Le corps d'un énoncé switch est délimité par des accolades ouverte et fermée : « {« à « } ». La syntaxe de l'énoncé de switch est :

switch(Expression)
{
    case Choice1:
         Statement1;
	break;
    case Choice2:
         Statement2;
	break;
    case Choice-n:
         Statement-n;
	break;
}
 
Author Note Dans C++, vous pouvez omettre le mot-clé break dans un case. Ceci crée un effet « chute » comme suit : après que le code s'exécute dans un case, si rien « ne l'arrête », l'exécution continue au prochain case. Ceci avait causé des problèmes et une exécution confuse dans le passé dans des programmes d'un certain C++. Pour l'éviter, C# exige un code d'interruption à la fin de chaque case. Cette interruption est faite en utilisant le mot-clé break.

L'expression à examiner dans un énoncé de case est un nombre entier. tant qu'un membre d'un énumérateur (enum) et d'un caractère (char) des types de données sont justes d'autres formes de nombres entiers, ils peuvent être utilisés aussi. Voici un exemple d'utilisation d'un énoncé switch :

using System;

public enum HouseType
{
    Unknown,
    SingleFamily,
    Townhouse,
    Condominium
}

class Program
{
    static void Main()
    {
        HouseType type = HouseType.Unknown;
        int choice;
        string strGarage = "";

        Console.WriteLine("Enter the type of house you want to purchase");
        Console.WriteLine("1. Single Family");
        Console.WriteLine("2. Townhouse");
        Console.WriteLine("3. Condominium");
        Console.Write("You Choice? ");
        choice = int.Parse(Console.ReadLine());

        switch (choice)
        {
            case 1:
                type = HouseType.SingleFamily;
                break;

            case 2:
                type = HouseType.Townhouse;
                break;

            case 3:
                type = HouseType.Condominium;
                break;
        }

        Console.Write("Does the house have an indoor garage (1=Yes/0=No)? ");
        int ans = int.Parse(Console.ReadLine());
        if (ans == 1)
            strGarage = "Yes";
        else
            strGarage = "No";

        Console.WriteLine("\nDesired House Type: {0}", type);
        Console.WriteLine("Has indoor garage?  {0}", strGarage);
    }
}

En établissant les résultats possibles que l'énoncé switch devrait considérer, parfois il y aura des possibilités autres que celles énumérés et que devez probablement considérer. Ce case spécial est manipulé par le mot-clé default. Le case default serait considéré si aucun des cases énumérés ne s'harmonise à la réponse fournie. La syntaxe de l'énoncé switch qui considère le case par défaut serait:

switch(Expression)
{
    case Choice1:
         Statement1;
	break;
    case Choice2:
         Statement2;
	break;
    case Choice-n:
         Statement-n;
	break;
    default:
         Other-Possibility;
	break;
}
Dans C++, la section default n'a pas besoin d'un mot-clé break parce qu'elle est en dernier. Dans C#, chaque case y compris la section default doit avoir son propre mécanisme de sortie, qui est pris en charge par un mot-clé break.

Par conséquent une autre version du programme ci-dessus serait

using System;

public enum HouseType
{
    Unknown,
    SingleFamily,
    Townhouse,
    Condominium
}

class Program
{
    static void Main()
    {
        HouseType type = HouseType.Unknown;
        int choice;
        string strGarage = "";

        Console.WriteLine("Enter the type of house you want to purchase");
        Console.WriteLine("1. Single Family");
        Console.WriteLine("2. Townhouse");
        Console.WriteLine("3. Condominium");
        Console.Write("You Choice? ");
        choice = int.Parse(Console.ReadLine());

        switch (choice)
        {
            case 1:
                type = HouseType.SingleFamily;
                break;

            case 2:
                type = HouseType.Townhouse;
                break;

            case 3:
                type = HouseType.Condominium;
                break;

            default:
                type = HouseType.Unknown;
                break;
        }

        Console.Write("Does the house have an indoor garage (1=Yes/0=No)? ");
        int ans = int.Parse(Console.ReadLine());
        if (ans == 1)
            strGarage = "Yes";
        else
            strGarage = "No";

        Console.WriteLine("\nDesired House Type: {0}", type);
        Console.WriteLine("Has indoor garage?  {0}", strGarage);
    }
}

Voici un exemple d'exécution du programme :

Enter the type of house you want to purchase
1. Single Family
2. Townhouse
3. Condominium
You Choice? 8
Does the house have an indoor garage (1=Yes/0=No)? 2

Desired House Type: Unknown
Has indoor garage?  No
Press any key to continue . . .

En plus d'une valeur d'un type int, vous pouvez également utiliser une autre variante des nombres entiers sur un énoncé switch. Par exemple, vous pouvez utiliser des lettres pour valider les cases. Voici un exemple:

using System;

public enum HouseType
{
    Unknown,
    SingleFamily,
    Townhouse,
    Condominium
}

class Program
{
    static void Main()
    {
        HouseType type = HouseType.Unknown;
        int choice;
        string strGarage = "";

        Console.WriteLine("Enter the type of house you want to purchase");
        Console.WriteLine("1. Single Family");
        Console.WriteLine("2. Townhouse");
        Console.WriteLine("3. Condominium");
        Console.Write("You Choice? ");
        choice = int.Parse(Console.ReadLine());

        switch (choice)
        {
            case 1:
                type = HouseType.SingleFamily;
                break;

            case 2:
                type = HouseType.Townhouse;
                break;

            case 3:
                type = HouseType.Condominium;
                break;

            default:
                type = HouseType.Unknown;
                break;
        }

        Console.Write("Does the house have an indoor garage (y/n)? ");
        char ans = char.Parse(Console.ReadLine());
        switch (ans)
        {
            case 'y':
                strGarage = "Yes";
                break;

            case 'n':
                strGarage = "No";
                break;

            default:
                strGarage = "Not Specified";
                break;
        }

        Console.WriteLine("\nDesired House Type: {0}", type);
        Console.WriteLine("Has indoor garage?  {0}", strGarage);
    }
}

Voici un exemple d'exécution du programme:

Enter the type of house you want to purchase
1. Single Family
2. Townhouse
3. Condominium
You Choice? 3
Does the house have an indoor garage (y/n)? y

Desired House Type: Condominium
Has indoor garage?  Yes
Press any key to continue . . .

Étude pratiqueÉtude pratique : Présentation des variables booléennes

  1. Pour créer une nouvelle classe, dans Explorateur de solution, droit-cliquez le nom du projet, placez la souris sur Ajouter et cliquez classe…
  2. Placez le nom de la classe OrderProcessing et lcliquez Ajouter
  3. Changez le fichier OrderProcessing.cs comme suit :
     
    using System;
    
    namespace FlowerShop2
    {
        class OrderProcessing
        {
            public Flower FlowerOrder;
            public int Quantity;
    
            public OrderProcessing()
            {
                FlowerOrder = new Flower();
            }
    
            public decimal GetTotalPrice()
            {
                return Quantity * FlowerOrder.UnitPrice;
            }
    
            public void GetFlowerType()
            {
                int choice = 0;
    
                Console.WriteLine("Enter the Type of Flower Order");
                Console.WriteLine("1. Roses");
                Console.WriteLine("2. Lilies");
                Console.WriteLine("3. Daisies");
                Console.WriteLine("4. Carnations");
                Console.WriteLine("5. Live Plant");
                Console.WriteLine("6. Mixed");
                Console.Write("Your Choice: ");
                choice = int.Parse(Console.ReadLine());
    
                switch (choice)
                {
                    case 1:
                        FlowerOrder.Type = FlowerType.Roses;
                        break;
                    case 2:
                        FlowerOrder.Type = FlowerType.Lilies;
                        break;
                    case 3:
                        FlowerOrder.Type = FlowerType.Daisies;
                        break;
                    case 4:
                        FlowerOrder.Type = FlowerType.Carnations;
                        break;
                    case 5:
                        FlowerOrder.Type = FlowerType.LivePlant;
                        break;
                    default:
                        FlowerOrder.Type = FlowerType.Mixed;
                        break;
                }
            }
    
            public void GetFlowerColor()
            {
                int choice = 0;
    
                Console.WriteLine("Enter the Color");
                Console.WriteLine("1. Red");
                Console.WriteLine("2. White");
                Console.WriteLine("3. Yellow");
                Console.WriteLine("4. Pink");
                Console.WriteLine("5. Orange");
                Console.WriteLine("6. Blue");
                Console.WriteLine("7. Lavender");
                Console.WriteLine("8. Mixed");
                Console.Write("Your Choice: ");
                choice = int.Parse(Console.ReadLine());
    
                switch (choice)
                {
                    case 1:
                        FlowerOrder.Color = FlowerColor.Red;
                        break;
                    case 2:
                        FlowerOrder.Color = FlowerColor.White;
                        break;
                    case 3:
                        FlowerOrder.Color = FlowerColor.Yellow;
                        break;
                    case 4:
                        FlowerOrder.Color = FlowerColor.Pink;
                        break;
                    case 5:
                        FlowerOrder.Color = FlowerColor.Yellow;
                        break;
                    case 6:
                        FlowerOrder.Color = FlowerColor.Blue;
                        break;
                    case 7:
                        FlowerOrder.Color = FlowerColor.Lavender;
                        break;
                    default:
                        FlowerOrder.Color = FlowerColor.Mixed;
                        break;
                }
            }
    
            public void GetFlowerArrangement()
            {
                int choice = 0;
    
                Console.WriteLine("Enter the Type of Arrangement");
                Console.WriteLine("1. Bouquet");
                Console.WriteLine("2. Vase");
                Console.WriteLine("3. Basket");
                Console.WriteLine("4. Mixed");
                Console.Write("Your Choice: ");
                choice = int.Parse(Console.ReadLine());
    
                switch (choice)
                {
                    case 1:
                        FlowerOrder.Arrangement = FlowerArrangement.Bouquet;
                        break;
                    case 2:
                        FlowerOrder.Arrangement = FlowerArrangement.Vase;
                        break;
                    case 3:
                        FlowerOrder.Arrangement = FlowerArrangement.Basket;
                        break;
                    default:
                        FlowerOrder.Arrangement = FlowerArrangement.Any;
                        break;
                }
            }
    
            public void ProcessOrder()
            {
                GetFlowerType();
                GetFlowerColor();
                GetFlowerArrangement();
    
                Console.Write("Enter the Unit Price: ");
                FlowerOrder.UnitPrice = decimal.Parse(Console.ReadLine());
    
                Console.Write("Enter Quantity:       ");
                Quantity = int.Parse(Console.ReadLine());
            }
    
            public void ShowOrder()
            {
                Console.WriteLine("=======================");
                Console.WriteLine("==-=-=Flower Shop=-=-==");
                Console.WriteLine("-----------------------");
                Console.WriteLine("Flower Type:  {0}", FlowerOrder.Type);
                Console.WriteLine("Flower Color: {0}", FlowerOrder.Color);
                Console.WriteLine("Arrangement:  {0}", FlowerOrder.Arrangement);
                Console.WriteLine("Price:        {0:C}", FlowerOrder.UnitPrice);
                Console.WriteLine("Quantity:     {0}", Quantity);
                Console.WriteLine("Total Price:  {0:C}", GetTotalPrice());
                Console.WriteLine("=======================");
            }
        }
    }
  4. Accédez au fichier Program.cs et changez le comme suit:
     
    using System;
    
    namespace FlowerShop2
    {
        class Program
        {
            static void Main()
            {
                OrderProcessing order = new OrderProcessing();
    
                order.ProcessOrder();
                Console.WriteLine();
    
                order.ShowOrder();
                Console.WriteLine();
            }
        }
    }
  5. Exécutez l'application et l'examiner. Voici un exemple :
     
    Enter the Type of Flower Order
    1. Roses
    2. Lilies
    3. Daisies
    4. Carnations
    5. Live Plant
    6. Mixed
    Your Choice: 4
    Enter the Color
    1. Red
    2. White
    3. Yellow
    4. Pink
    5. Orange
    6. Blue
    7. Lavender
    8. Mixed
    Your Choice: 7
    Enter the Type of Arrangement
    1. Bouquet
    2. Vase
    3. Basket
    4. Mixed
    Your Choice: 3
    Enter the Unit Price: 45.85
    Enter Quantity:       3
    
    =======================
    ==-=-=Flower Shop=-=-==
    -----------------------
    Flower Type:  Carnations
    Flower Color: Lavender
    Arrangement:  Basket
    Price:        $45.85
    Quantity:     3
    Total Price:  $137.55
    =======================
    
    Press any key to continue . . .
  6. Fermez la fenêtre DOS

Combinaison des cases

Chacun des cases que nous avons utilisée jusqu'ici a examiné seulement une possibilité avant d'exécuter l'énoncé correspondant. Vous pouvez combiner des cases pour exécuter le même énoncé. Pour ce faire, dactylographiez un case, sa valeur, et le point-virgule. Dactylographiez un autre case en utilisant la même formule. Quand les cases sont prêts, vous pouvez alors exécuter l'énoncé désiré. Voici un exemple :

using System;

public enum HouseType
{
    Unknown,
    SingleFamily,
    Townhouse,
    Condominium
}

class Program
{
    static void Main()
    {
        HouseType type = HouseType.Unknown;
        int choice;
        string strGarage = "";

        Console.WriteLine("Enter the type of house you want to purchase");
        Console.WriteLine("1. Single Family");
        Console.WriteLine("2. Townhouse");
        Console.WriteLine("3. Condominium");
        Console.Write("You Choice? ");
        choice = int.Parse(Console.ReadLine());

        switch (choice)
        {
            case 1:
                type = HouseType.SingleFamily;
                break;

            case 2:
                type = HouseType.Townhouse;
                break;

            case 3:
                type = HouseType.Condominium;
                break;

            default:
                type = HouseType.Unknown;
                break;
        }

        Console.Write("Does the house have an indoor garage (y/n)? ");
        char ans = char.Parse(Console.ReadLine());
        switch (ans)
        {
            case 'y':
            case 'Y':
                strGarage = "Yes";
                break;

            case 'n':
            case 'N':
                strGarage = "No";
                break;

            default:
                strGarage = "Not Specified";
                break;
        }

        Console.WriteLine("\nDesired House Type: {0}", type);
        Console.WriteLine("Has indoor garage?  {0}", strGarage);
    }
}

Ceci produirait:

Enter the type of house you want to purchase
1. Single Family
2. Townhouse
3. Condominium
You Choice? 3
Does the house have an indoor garage (y/n)? Y

Desired House Type: Condominium
Has indoor garage?  Yes
Press any key to continue . . .

Utiliser des énumérations

Une des utilisations les plus fondamentales des énumérations est de les traiter dans un énoncé switch. Pour ce faire, vous passez la valeur d'une énumération à un switch. Les valeurs des énumérations sont alors traitées dans les énoncés de case. Voici un exemple :

using System;

public enum HouseType
{
    Unknown,
    SingleFamily,
    Townhouse,
    Condominium
}

class Program
{
    static void Main()
    {
        string strHouseType;
        int choice;
        string strGarage = "";

        Console.WriteLine("Enter the type of house you want to purchase");
        Console.WriteLine("1. Single Family");
        Console.WriteLine("2. Townhouse");
        Console.WriteLine("3. Condominium");
        Console.Write("You Choice? ");
        choice = int.Parse(Console.ReadLine());

        switch((HouseType)choice)
        {
            case HouseType.SingleFamily:
                strHouseType = "Single Family";
                break;

            case HouseType.Townhouse:
                strHouseType = "Townhouse";
                break;

            case HouseType.Condominium:
                strHouseType = "Condominium";
                break;

            default:
                strHouseType = "Unknown";
                break;
        }

        Console.Write("Does the house have an indoor garage (y/n)? ");
        char ans = char.Parse(Console.ReadLine());
        switch (ans)
        {
            case 'y':
            case 'Y':
                strGarage = "Yes";
                break;

            case 'n':
            case 'N':
                strGarage = "No";
                break;

            default:
                strGarage = "Not Specified";
                break;
        }

        Console.WriteLine("\nDesired House Type: {0}", strHouseType);
        Console.WriteLine("Has indoor garage?  {0}", strGarage);
    }
}

Voici un exemple d'exécution du programme :

Enter the type of house you want to purchase
1. Single Family
2. Townhouse
3. Condominium
You Choice? 1
Does the house have an indoor garage (y/n)? N

Desired House Type: Single Family
Has indoor garage?  No
Press any key to continue . . .
  

Précédent Copyright © 2007-2008, Yevol Suivant