관통 모든 코드 경로를 따를 수 있습니다 이유 :코드가 잘 작동 이하로하지 C# 컴파일러는 switch 문
ListControl lstMyControl;
if (SomeVariable == SomeEnum.Value1)
{
lstMyControl = new DropDownList();
}
else
{
lstMyControl = new RadioButtonList();
}
lstMyControl.CssClass = "SomeClass";
를 아래의 코드는 컴파일되지 않습니다 반면 :
ListControl lstMyControl;
switch (SomeVariable)
{
case SomeEnum.Value1:
lstMyControl = new DropDownList();
break;
case default:
lstMyControl = new RadioButtonList();
break;
}
lstMyControl.CssClass = "SomeClass";
을 두 번째 예에서는 컴파일러는 인스턴스화되지 않은 변수에 속성을 설정하려고한다고 말합니다. 두 경우 모두 lstMyControl을 인스턴스화해야하지만 컴파일러는 switch 문을 통해 해당 코드 경로를 따라갈 수 없습니다. 위의 간단한 예제에서는 if/else를 사용합니다. 그러나 같은 기본 클래스로부터 상속받은 10 개의 다른 클래스를 사용하여 switch 문을 사용할 때 10 if/elseif 문이 성가신 경우 이와 같은 작업을 몇 번 수행해야합니다.
앞으로 답을 찾아보십시오. 자바는 그런 식으로 물지 않을 것입니다 ... 그리고 나는 C#도 기대하지 않을 것입니다. – Romain
if (SomeVariable = SomeEnum.Value1) <- 대신이 값을 비교해서는 안됩니다. if (SomeVariable == SomeEnum.Value1) –
두 번째 예제에서 (작성된대로), 컴파일러는 실제로'syntax error '('default'가있는 행에 'expected'라고 말합니다.)를 수정하십시오. 'default :'와 presto는 모두 작동합니다. – AakashM