어떤 검색 텍스트 상자가 있는지에 따라 검색 필드에 검색어를 입력하는 스위치 문을 작성하려고합니다. 다음 코드가 있습니다. 그러나 “한 사례 레이블에서 제어 할 수 없습니다”오류가 발생합니다.
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;
}