173 votes

Le contrôle ne peut pas tomber à cause d'une étiquette de cas

J'essaie d'écrire une instruction de commutation qui saisit le terme recherché dans le champ de recherche en fonction de la zone de texte de recherche présente. J'ai le code suivant. Mais je reçois une erreur "Control cannot fall through from one case label".

switch (searchType)
{
    case "SearchBooks":
        Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
        Selenium.Click("//*[@id='SearchBooks_SearchBtn']");

    case "SearchAuthors":
        Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
        Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
}

Le contrôle ne peut pas tomber d'une étiquette de cas ( case "SearchBooks": ) à un autre

Le contrôle ne peut pas tomber d'une étiquette de cas ( case "SearchAuthors": ) à un autre

0 votes

Je viens de réaliser à quel point une déclaration de commutation serait plus belle si nous n'avions pas à mettre break; là-dedans. C'est un horrible artefact du passé.

0 votes

Parfois, il faut regrouper plusieurs cas et les traiter de la même manière ! La fonction Falling Through est très utile dans ces cas-là.

0 votes

@stackoverblown certainement, mais c'est une sorte de cas spécial que le compilateur pourrait être assez intelligent pour comprendre. De toute façon, nous sommes coincés avec ça !

4voto

husnain shabbir Points 201

Vous avez manqué des déclarations de pause. N'oubliez pas d'utiliser break -même dans les default cas.

switch (searchType)
{
    case "SearchBooks":
        Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
        Selenium.Click("//*[@id='SearchBooks_SearchBtn']");
        break;
    case "SearchAuthors":
        Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
        Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
        break;
    default:
        Console.WriteLine("Default case handling");
        break;
}

4voto

Ouissal Points 299

Puisque cela n'a pas été mentionné dans les autres réponses, je voudrais ajouter que si vous voulez case SearchAuthors pour être exécuté juste après le premier cas, tout comme l'omission de l'option break dans certains autres langages de programmation où cela est autorisé, vous pouvez simplement utiliser goto .

switch (searchType)
{
    case "SearchBooks":
    Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
    Selenium.Click("//*[@id='SearchBooks_SearchBtn']");
    goto case "SearchAuthors";

    case "SearchAuthors":
    Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
    Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
    break;
}

0voto

Bob Maharjan Points 25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Case_example_1
{
    class Program
    {
        static void Main(string[] args)
        {
            Char ch;
            Console.WriteLine("Enter a character");
            ch =Convert.ToChar(Console.ReadLine());
            switch (ch)
            {
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':
                case 'A':
                case 'E':
                case 'I':
                case 'O':
                case 'U':

                    Console.WriteLine("Character is alphabet");
                    break;

                default:
                    Console.WriteLine("Character is constant");
                    break;

            }

            Console.ReadLine();

        }
    }
}

1 votes

Vous devriez mettre quelques mots ou quelque chose pour expliquer pourquoi c'est une solution. Puisque vous n'expliquez pas pourquoi vous avez besoin des pauses pour certains et pas pour d'autres.

3 votes

Vous vouliez dire "consonne" ?

1 votes

1. Je pense que vous vouliez dire "voyelle" vs "alphabet". 2. Vous pourriez vouloir changer switch (ch) à ce qui suit. char vowelCheckChar = ( (Char.ToLower(ch) == 'y') ? ( ((new Random()).Next(2) == 0) ? ch : 'a' ) : ch ); // char vowelCheckChar = switch (vowelCheckChar) Désolé, je devais le faire. ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X