Почему c# компилятор требует оператора завершения в конструкции переключателя?

У меня есть трудное время, понимая, почему компилятор требует оператора завершения использования. Не возможно пропустить его, так как падение через теперь позволяется. Я вижу основания для перерыва C или C++, но необходимый здесь.

Почему это не встроенное поведение для повреждения после того, как случай будет закончен? Разве это не просто синтаксис без семантического?

Извините, если это - глупый вопрос.

Править: Падение через позволяется только, когда ящик пуст. Когда существует оператор там, Вы не можете опустить оператор завершения. Так, это - другой разговор.

12
задан anthares 2 March 2010 в 14:49
поделиться

3 ответа

Компилятор не столько "нуждается" в операторах break, сколько требует их.

Это было проектное решение, сравнимое с требованием использовать ref при вызове метода с параметром pass-by-reference.

Это сохраняет семантическую близость кода к C и C++, устраняя при этом подводные камни выпадения, которые всегда были спорной "особенностью" языков C.

10
ответ дан 2 December 2019 в 20:40
поделиться

Оператор break в C # был дизайнерское решение создателей языка ... По сути, они хотели «однозначного» оператора разрыва, оператора разрыва, который работал бы только в одном направлении. Короче говоря, они не хотели провалов, и если бы они просто предотвратили провалы без включения «разрыва», это нарушило бы обратную совместимость с C ++.

3
ответ дан 2 December 2019 в 20:40
поделиться

Обычно такой код является ошибкой:

// Contrived calculator demostration
decimal x = 5m;
decimal y = 10m;
decimal result = 0m;
string blah = "Divide";

// .. other code omitted

switch(blah) {
    case "Divide":
        result = x / y;

    case "Multiply":
        result = x * y;

    case "Add":
        result = x + y;

    case "Subtract":
        result = x - y;

    default:
        MessageBox.Show("Not a valid operation");

}

Однако компилятор не может предположить, что пропущенные разрывы - это ошибка. Насколько ему известно, вы действительно хотели, чтобы случаи выпадали.

Простое предположение, что разрывы должны быть в конце каждого случая, просто поменяет одну ошибку на другую.

Поэтому, вместо этого, разработчики языка запретили выпадение из непустых случаев и выдают ошибку, если вы их опускаете.

Если вам нужен код, разделяемый между непустыми случаями, поместите его в private (возможно, static) метод и вызывайте его оттуда.

И последнее замечание: выпадение пустых случаев - это все, что ожидается от пустого случая, поэтому это разрешено.

0
ответ дан 2 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: