Escopo da variável ímpar na instrução switch
Essa questão me lembrou de uma velha pergunta não respondida em minha mente sobre a mudança:
int personType = 1;
switch (personType)
{
case 1:
Employee emp = new Employee();
emp.ExperienceInfo();
break;
case 2:
Employee emp = new Employee();
//Error: A local variable named 'emp' is already defined in this scope
emp.ManagementInfo();
break;
case 3:
Student st = new Student();
st.EducationInfo();
break;
default:
MessageBox.Show("Not valid ...");
}
Por que o emp é reconhecido no 'caso 2'? em C ++ (se eu não estiver errado) poderíamos usar vários casos juntos, mas em C # isso é impossível e devemos fecharcase 1
com quebra para o seguinte código parece certo em C + + e errado em c #:
case 1:
case 2:
SomeMethodUsedByBothStates();
Quando não podemos ter tal comportamento, então por que deveríamos ser capazes de declarar empcase 1
e vê-lo emcase 2
? Se nunca dois casos acontecem juntos, então por que o objeto deveria ser visto em ambos?