У меня есть трудное время, понимая, почему компилятор требует оператора завершения использования. Не возможно пропустить его, так как падение через теперь позволяется. Я вижу основания для перерыва C или C++, но необходимый здесь.
Почему это не встроенное поведение для повреждения после того, как случай будет закончен? Разве это не просто синтаксис без семантического?
Извините, если это - глупый вопрос.
Править: Падение через позволяется только, когда ящик пуст. Когда существует оператор там, Вы не можете опустить оператор завершения. Так, это - другой разговор.
Компилятор не столько "нуждается" в операторах break, сколько требует их.
Это было проектное решение, сравнимое с требованием использовать ref
при вызове метода с параметром pass-by-reference.
Это сохраняет семантическую близость кода к C и C++, устраняя при этом подводные камни выпадения, которые всегда были спорной "особенностью" языков C.
Оператор break в C # был дизайнерское решение создателей языка ... По сути, они хотели «однозначного» оператора разрыва, оператора разрыва, который работал бы только в одном направлении. Короче говоря, они не хотели провалов, и если бы они просто предотвратили провалы без включения «разрыва», это нарушило бы обратную совместимость с C ++.
Обычно такой код является ошибкой:
// 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
) метод и вызывайте его оттуда.
И последнее замечание: выпадение пустых случаев - это все, что ожидается от пустого случая, поэтому это разрешено.