어떤 검색 텍스트 상자가 있는지에 따라 검색 필드에 검색어를 입력하는 스위치 문을 작성하려고합니다. 다음 코드가 있습니다. 그러나 “한 사례 레이블에서 제어 할 수 없습니다”오류가 발생합니다.
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.
답변
당신은 필요에 break;, throw, goto, 또는 return귀하의 경우 라벨의 각에서. 루프에서 당신은 또한 할 수 있습니다 continue.
        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 "SearchBooks": // no code inbetween case labels.
 case "SearchAuthors":
    // handle both of these cases the same way.
    break;답변
C #에서 넘어 설 수있는 것 이상을 수행 할 수 있지만 “두려운”goto 문을 사용해야합니다. 예를 들면 다음과 같습니다.
switch (whatever)
{
  case 2:
    Result.Write( "Subscribe" );
    break;
  case 1:
    Result.Write( "Un" );
    goto case 2;
}답변
break 문을 추가해야합니다.
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;
}이 중 핸들에 당신이 원하는 것을 가정 SearchBooks하는 경우 또는 을 SearchAuthors– 당신은 제어 흐름은 다음 의미 한 경우 문에서 “타락”을 것이다 전통적인 C 스타일의 switch 문에 작성했던대로 그 코드의 4 선 경우에 실행됩니다 searchType == "SearchBooks".
당신이보고있는 컴파일러 에러는 프로그래머에게이 잠재적 인 에러를 경고하기 위해 (적어도 부분적으로) 소개되었습니다.
대안으로 오류가 발생하거나 메소드에서 리턴 될 수 있습니다.
답변
각 스위치 케이스의 끝에 다음과 같이이 문제를 해결하기 위해 break 문을 추가하십시오.
           switch (manu)
            {
                case manufacturers.Nokia:
                    _phanefact = new NokiaFactory();
                    break;
                case manufacturers.Samsung:
                    _phanefact = new SamsungFactory();
                    break;
            }답변
다른 답변에서 언급되지 않았기 때문에 첫 번째 사례가 완료 된 직후 SearchAuthors를 실행하려면 다른 프로그래밍 언어에서 “break”를 생략 할 때와 마찬가지로 SearchAuthors를 실행하려면 추가하고 싶습니다. 그 위치가 낮아지면 간단히 “goto”를 사용할 수 있습니다.
switch (searchType)
{
    case "SearchBooks":
    Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
    Selenium.Click("//*[@id='SearchBooks_SearchBtn']");
    goto case "SearchAuthors";
    case "SearchAuthors":
    Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
    Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
    break;
}답변
break 문을 놓쳤습니다. 기본 경우에도 break 문을 입력하는 것을 잊지 마십시오.
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;
    default :
        Console.WriteLine("Default case handling");
        break;
}