Этот вопрос напомнил мне о старом неотвеченном вопросе в моей голове о переключении:
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 ...");
}
почему emp распознается в "случае 2"? в С++ (если я не ошибаюсь) мы могли бы использовать несколько случаев вместе, но в С# это невозможно, и мы должны закрыть case 1
с разрывом, поэтому следующий код кажется правильным на С++ и неправильным в С#:
case 1:
case 2:
SomeMethodUsedByBothStates();
Когда мы не можем иметь такое поведение, почему мы должны иметь возможность объявлять emp в case 1
и видеть его в case 2
? Если никогда не случаются два случая, так почему же объект должен быть замечен в обоих?