Estoy tratando de escribir una declaración de cambio que escriba el término de búsqueda en el campo de búsqueda según el cuadro de texto de búsqueda que esté presente. tengo el siguiente código. Pero recibo el error "El control no puede fallar desde una etiqueta de caso".
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']");
}
El control no puede pasar de una etiqueta de caso (
case "SearchBooks":
) a otraEl control no puede pasar de una etiqueta de caso (
case "SearchAuthors":
) a otra
fuente
break
pasa si mi solución no requiere porque necesita fallar en algunas circunstancias?goto case "some String"
.Es necesario que
break;
,throw
,goto
, oreturn
de cada una de las etiquetas de caso. En un bucle también puedescontinue
.El único momento en que esto no es cierto es cuando las etiquetas de los casos se apilan así:
fuente
continue
es posible tambiéngoto case "SearchBooks";
para que tenga la capacidad de hacer lo que necesita hacer sin perder mucha expresividad o agregar errores inesperados.Puede hacer más que simplemente caer en C #, pero debe utilizar la declaración "goto" temida. Por ejemplo:
fuente
Necesita agregar una declaración de interrupción:
Esto supone que desea manejar el
SearchBooks
caso o elSearchAuthors
- como había escrito, en una declaración de cambio de estilo C tradicional el flujo de control habría "caído" de una declaración de caso a la siguiente, lo que significa que las 4 líneas de código ser ejecutado en el caso dondesearchType == "SearchBooks"
.El error del compilador que está viendo se introdujo (al menos en parte) para advertir al programador de este posible error.
Como alternativa, podría haber arrojado un error o regresado de un método.
fuente
Al final de cada caso de cambio, simplemente agregue la declaración de interrupción para resolver este problema de esta manera:
fuente
Dado que no se mencionó en las otras respuestas, me gustaría agregar que si desea que los CaseAuthors se ejecuten inmediatamente después de que se haga el primer caso, al igual que ocurre cuando se omite el "descanso" en algunos otros lenguajes de programación donde está permitido, simplemente puede usar "goto".
fuente
Te perdiste las declaraciones de ruptura. No olvides ingresar la declaración de ruptura incluso en el caso predeterminado.
fuente
fuente
switch (ch)
a lo siguiente.char vowelCheckChar = ( (Char.ToLower(ch) == 'y') ? ( ((new Random()).Next(2) == 0) ? ch : 'a' ) : ch ); // char vowelCheckChar = switch (vowelCheckChar)
Lo siento, tuve que hacerlo. ;)