web-dev-qa-db-fra.com

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

J'essaie d'écrire une instruction switch qui taperait le terme de recherche 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 "Le contrôle ne peut pas tomber de la part d’une seule étiquette". S'il vous plaît laissez-moi savoir comment résoudre ce problème. Merci d'avance!

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 ('cas "SearchBooks":') à une autre

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

136
Maya

Vous avez manqué des pauses ici:

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;
}

Sans eux, le compilateur pense que vous essayez d'exécuter les lignes sous case "SearchAuthors": immédiatement après que les lignes sous case "SearchBooks": aient été exécutées, ce qui n'est pas autorisé en C #.

En ajoutant les instructions break à la fin de chaque cas, le programme quitte chaque cas une fois l'opération terminée, quelle que soit la valeur de searchType.

230
BoltClock

Vous devez break;, throw, goto ou return à partir de chacune de vos étiquettes de cas. Dans une boucle, vous pouvez également continue.

        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;
        }

La seule fois où ce n'est pas vrai, c'est quand les étiquettes de cas sont empilées comme ceci:

 case "SearchBooks": // no code inbetween case labels.
 case "SearchAuthors":
    // handle both of these cases the same way.
    break;
129
agent-j

Vous pouvez faire plus que tomber dans C #, mais vous devez utiliser la déclaration "redoutée" de goto. Par exemple:

switch (whatever)
{
  case 2:
    Result.Write( "Subscribe" );
    break;
  case 1:
    Result.Write( "Un" );
    goto case 2;
}
25
Darwin Airola

Vous devez ajouter une déclaration de pause:

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;
}

Cela suppose que vous souhaitiez gérer le cas SearchBookso le SearchAuthors - comme vous l'avez écrit, dans une instruction de commutateur de style C traditionnelle, le flux de contrôle aurait " tombé "d'une instruction case à la suivante, ce qui signifie que les 4 lignes de code sont exécutées dans le cas où searchType == "SearchBooks".

L'erreur de compilation que vous voyez a été introduite (au moins en partie) pour avertir le programmeur de cette erreur potentielle.

Au lieu de cela, vous pourriez avoir renvoyé une erreur ou renvoyé une méthode.

14
Justin

À la fin de chaque cas de commutateur, ajoutez simplement l'instruction break pour résoudre ce problème de la manière suivante:

           switch (manu)
            {
                case manufacturers.Nokia:
                    _phanefact = new NokiaFactory();
                    break;

                case manufacturers.Samsung:
                    _phanefact = new SamsungFactory();
                    break;

            }
3
Debendra Dash

Vous avez manqué des déclarations de rupture. N'oubliez pas de saisir une déclaration de rupture, même dans le cas par défaut.

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;

}
2
husnain shabbir

Etant donné que cela n’a pas été mentionné dans les autres réponses, je voudrais ajouter que si vous voulez que les auteurs de recherche de cas soient exécutés juste après que le premier cas soit terminé, comme c’est le cas lorsque vous omettez la "pause" dans d’autres langages de programmation. là où cela est permis, 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;
}
1
Ouissal
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
Bob Maharjan