1. ホーム
  2. c#

[解決済み] 1つのケースラベルから制御が落ちることはない

2022-02-18 18:25:49

質問事項

どの検索テキストボックスが存在するかによって、検索フィールドに検索語を入力するようなswitch文を書こうとしています。以下のようなコードです。しかし、"Control cannot fall through from one case label"というエラーが発生します。

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": から別の

解決方法は?

そこで、いくつかの区切りを見逃しています。

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

これがないと、コンパイラは以下の行を実行しようとしていると判断します。 case "SearchAuthors": の下の行の直後に case "SearchBooks": が実行されましたが、これはC#では許されないことです。

を追加することで break ステートメントを各ケースの末尾に置くと、プログラムは各ケースが終了した後に searchType .