Próbuję napisać instrukcję przełącznika, która wpisuje wyszukiwane hasło w polu wyszukiwania w zależności od tego, które pole tekstowe wyszukiwania jest obecne. Mam następujący kod. Ale pojawia się błąd „Kontrola nie może wyjść z jednej etykiety przypadku”.
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']");
}
Kontrola nie może przechodzić z jednej etykiety przypadku (
case "SearchBooks":
) do drugiejKontrola nie może przechodzić z jednej etykiety przypadku (
case "SearchAuthors":
) do drugiej
źródło
break
ponieważ musi się spełnić w pewnych okolicznościach ?!goto case "some String"
.Trzeba
break;
,throw
,goto
, lubreturn
od każdego z etykietami przypadków. W pętli możesz teżcontinue
.Nie jest to prawdą tylko wtedy, gdy etykiety skrzynek są ułożone w następujący sposób:
źródło
continue
jest również możliwegoto case "SearchBooks";
więc masz możliwość robienia tego, co trzeba, bez utraty ekspresji lub dodawania nieoczekiwanych błędów.Możesz zrobić więcej niż tylko upaść w C #, ale musisz użyć „przerażającej” instrukcji goto. Na przykład:
źródło
Musisz dodać instrukcję przerwania:
Zakłada się, że chcesz albo obsłużyć
SearchBooks
przypadek lubSearchAuthors
- jak pisał w, w tradycyjnym switch C-styl przepływ kontrola byłaby „upadły przez” z jednej instrukcji case do następnego sposób, że wszystkie 4 linie kodu zostać wykonany w przypadku, gdysearchType == "SearchBooks"
.Błąd kompilatora, który widzisz, został wprowadzony (przynajmniej częściowo), aby ostrzec programistę o tym potencjalnym błędzie.
Alternatywnie mogłeś zgłosić błąd lub wrócić z metody.
źródło
Na końcu każdego przypadku przełącznika po prostu dodaj instrukcję break, aby rozwiązać ten problem w następujący sposób:
źródło
Ponieważ nie zostało to wspomniane w innych odpowiedziach, chciałbym dodać, że jeśli chcesz, aby SearchAuthors przypadku był wykonywany zaraz po wykonaniu pierwszego przypadku, tak jak ma to miejsce w przypadku pomijania "przerwy" w niektórych innych językach programowania jeśli jest to dozwolone, możesz po prostu użyć „goto”.
źródło
Pominięto instrukcje break. Nie zapomnij wprowadzić instrukcji break nawet w przypadku domyślnego.
źródło
źródło
switch (ch)
na następujące.char vowelCheckChar = ( (Char.ToLower(ch) == 'y') ? ( ((new Random()).Next(2) == 0) ? ch : 'a' ) : ch ); // char vowelCheckChar = switch (vowelCheckChar)
Przepraszam, musiałem. ;)