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?

questionAnswers(4)

yourAnswerToTheQuestion