J'essaie d'écrire une instruction de commutation 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 j'obtiens une erreur "Le contrôle ne peut pas passer d'une étiquette de cas".
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 passer d'une étiquette de cas (
case "SearchBooks":
) à une autreLe contrôle ne peut pas passer d'une étiquette de cas (
case "SearchAuthors":
) à une autre
la source
break
parce qu'elle doit échouer dans certaines circonstances?!goto case "some String"
.Vous devez
break;
,throw
,goto
oureturn
de chacun de vos étiquettes de cas. Dans une boucle, vous pouvez aussicontinue
.Le seul moment où ce n'est pas vrai, c'est lorsque les étiquettes de cas sont empilées comme ceci:
la source
continue
est possible aussigoto case "SearchBooks";
de faire ce que vous devez faire sans perdre beaucoup d'expressivité ou ajouter des bogues inattendus.Vous pouvez faire plus que simplement tomber en C #, mais vous devez utiliser l'instruction goto "redoutée". Par exemple:
la source
Vous devez ajouter une instruction break:
Cela suppose que vous souhaitiez gérer le
SearchBooks
cas ou leSearchAuthors
- comme vous l'aviez écrit, dans une instruction de commutateur de style C traditionnelle, le flux de contrôle aurait "échoué" d'une instruction de cas à la suivante, ce qui signifie que les 4 lignes de code être exécuté dans le cas oùsearchType == "SearchBooks"
.L'erreur du compilateur que vous voyez a été introduite (au moins en partie) pour avertir le programmeur de cette erreur potentielle.
Comme alternative, vous pourriez avoir généré une erreur ou renvoyé une méthode.
la source
À la fin de chaque cas de commutation, ajoutez simplement l'instruction break pour résoudre ce problème comme ceci:
la source
Comme cela n'a pas été mentionné dans les autres réponses, j'aimerais ajouter que si vous voulez que le cas SearchAuthors soit exécuté juste après le premier cas, tout comme c'est le cas lorsque vous omettez le "break" dans certains autres langages de programmation là où cela est autorisé, vous pouvez simplement utiliser "goto".
la source
Vous avez manqué des instructions break. N'oubliez pas de saisir une instruction break même dans le cas par défaut.
la source
la source
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. ;)