Я пытаюсь написать оператор switch, который вводит поисковый термин в поле поиска в зависимости от того, какое текстовое поле поиска присутствует. У меня есть следующий код. Но я получаю сообщение об ошибке «Не удается выполнить контроль из одной метки».
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']");
}
Элемент управления не может
case "SearchBooks":
перейти от одной метки ( ) к другомуЭлемент управления не может
case "SearchAuthors":
перейти от одной метки ( ) к другому
источник
break
потому что оно должно провалиться при некоторых обстоятельствах ?!goto case "some String"
.Вам нужно
break;
,throw
,goto
илиreturn
от каждого из ваших этикеток. В цикле вы также можетеcontinue
.Единственный случай, когда это не так, это когда метки дел уложены так:
источник
continue
также возможноgoto case "SearchBooks";
делать то, что вам нужно, не теряя при этом выразительности и не добавляя неожиданных ошибок.Вы можете сделать больше, чем просто провалиться в C #, но вы должны использовать «страшный» оператор goto. Например:
источник
Вам нужно добавить оператор перерыва:
Это предполагает , что вы хотите , либо ручку на
SearchBooks
случае илиSearchAuthors
- как было написано в, в традиционной постановке переключателя C-стиле поток управления бы «упавший через» от одного саза к следующему значению , что все 4 строки коды выполнить в случае, когдаsearchType == "SearchBooks"
.Ошибка компилятора, которую вы видите, была введена (по крайней мере частично), чтобы предупредить программиста об этой потенциальной ошибке.
В качестве альтернативы вы могли бы выдать ошибку или вернуться из метода.
источник
В конце каждого случая переключения просто добавьте оператор break, чтобы решить эту проблему следующим образом:
источник
Поскольку это не упоминалось в других ответах, я хотел бы добавить, что если вы хотите, чтобы SearchAuthors дел выполнялся сразу после первого случая, точно так же, как и в случае пропуска "break" в некоторых других языках программирования. где это разрешено, вы можете просто использовать «Перейти».
источник
Вы пропустили операторы break. Не забудьте ввести оператор break даже в случае по умолчанию.
источник
источник
switch (ch)
к следующему.char vowelCheckChar = ( (Char.ToLower(ch) == 'y') ? ( ((new Random()).Next(2) == 0) ? ch : 'a' ) : ch ); // char vowelCheckChar = switch (vowelCheckChar)
Извините, пришлось. ;)