С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 61
.NET 5

Ошибка при компиляции switch expression

19.10.2021, 18:56. Показов 2210. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу понять, как отрабатывает такой код. Почему ошибка при компиляции?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch (i)
            {
                case 1:
                    Console.WriteLine("Не удовлетворительно");
                    break;
                case >= 2 and <= 6:
                    Console.WriteLine(i+ " - Удовлетворительно");
                    break;
                case >= 7:
                case <= 10:
                    Console.WriteLine(i+ " - Хорошо");
                    break;
                case >= 11 and <= 12:
                    Console.WriteLine(i+ " - Отлично");
                    break;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2021, 18:56
Ответы с готовыми решениями:

Ошибка компиляции "Cannot apply indexing with [] to an expression of type 'method group'"
Добрый день!Хочу сделать приложение - хранилище файлов с загрузкой и скачиванием файлов.Возможно ошиблась командой .Помогите разобраться.

Как в switch expression сделать некоторое условие?
Вопрос как вычислить длинну числа используя switch expression обязательно, но мне не нужен ответ на задачу.Вот у нас дается число , я же не...

Ошибка при компиляции [Error] expected primary-expression before '==' token
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; using namespace std; int main() { const int n = 20; const...

10
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.10.2021, 19:03
SergMT, порядок кейсов имеет значение.
В вашем случае последнее условие уже покрывается условием >= 7 выше, о чем компилятор и сообщит.

Или у вас какая-то другая ошибка компиляции?
1
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
20.10.2021, 09:10
kolorotur, вероятно, ошибка из-за того, что вместо значения в case находится условие. Запамятовали, что в старых версиях такое не поддерживается?)
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
20.10.2021, 10:04
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
Запамятовали, что в старых версиях такое не поддерживается?
Да меня вроде старческий маразм еще не настолько накрыл, чтобы я не помнил что две версии назад было.

Обычно стараюсь предполагать что автор более-менее знает что делает, но на всякий случай спросил о других ошибках компиляции.
1
HF
 Аватар для HF
1307 / 885 / 200
Регистрация: 09.09.2011
Сообщений: 2,598
Записей в блоге: 2
20.10.2021, 12:33
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
вероятно, ошибка из-за того, что вместо значения в case находится условие. Запамятовали, что в старых версиях такое не поддерживается?)

Не по теме:

Автор указал в тэге темы - NET5. Значит точно знает.
Лучше бы цитировали ошибку, не было бы и гаданий.

0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
20.10.2021, 15:32
HF, Вы доверяете тегам, которые указывают авторы?) они порой заглавие написать не в состоянии, я бы на это вообще не смотрел.
P.S. ни в коем случае не хотел сейчас как-то ущемить автора топика)
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3392 / 2714 / 574
Регистрация: 04.09.2018
Сообщений: 8,534
Записей в блоге: 3
20.10.2021, 15:52
SergMT,
Цитата Сообщение от kolorotur Посмотреть сообщение
В вашем случае последнее условие уже покрывается условием >= 7 выше, о чем компилятор и сообщит.
Именно так. Блок будет недоступным.
Цитата Сообщение от SergMT Посмотреть сообщение
Почему ошибка при компиляции?
Вы не читаете того, что сообщает вам студия?
0
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 61
25.10.2021, 22:51  [ТС]
Я правильно понял что это просто разное поведение разных версий объявления case? В старой версии управление могло переходить на следующий вариант case в случае отсутствия break, а в новой не может?
0
HF
 Аватар для HF
1307 / 885 / 200
Регистрация: 09.09.2011
Сообщений: 2,598
Записей в блоге: 2
25.10.2021, 23:05
Цитата Сообщение от SergMT Посмотреть сообщение
Я правильно понял что это просто разное поведение разных версий объявления case? В старой версии управление могло переходить на следующий вариант case в случае отсутствия break, а в новой не может?
Нет, вы ничего не поняли. Притом что даже ошибку так и не процитировали.
Все кто пытался помочь, видят ошибку
"CS8120 The switch case is unreachable. It has already been handled by a previous case or it is impossible to match."
она явно говорит что одной из условий выше уже покрыло одно из последующих. То есть это анализ ошибки ещё До компиляции.
В вашем случае >=7 покрывает >= 11 and <= 12. Не нужно много знаний чтобы просто взять и поставить это условие впереди чтобы ошибка пропала.

А отсутствие break так же работают как и раньше.
Но
C#
1
2
3
        case >= 7:
        case <= 10:
                break;
это не
C#
1
2
        case >= 7 and <= 10:
                break;
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
25.10.2021, 23:09
SergMT, не правильно. В старых версия c# в case можно помещать только значение переменной. А в конце каждого блока сase должен ставиться один из операторов перехода: break, goto case, return или throw. Как правило, используется оператор break. При его применении другие блоки case выполняться не будут.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.10.2021, 23:22
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
А в конце каждого блока сase должен ставиться один из операторов перехода: break, goto case, return или throw
Не совсем так — правило таково, что конец блока switch (закрывающая фигурная) должен быть не достижим.
Операторы перехода это гарантируют, но любая другая конструкция тоже сойдет:
C#
1
2
3
4
5
switch (something)
{
   case whatever:
      while (true); // Переход не нужен, т.к. бесконечный цикл.
}
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2021, 23:22
Помогаю со студенческими работами здесь

Проблемы при компиляции кода Expression: _CrtIsValidHeapPointer(block) и Expression: is_block_type_valid(header->_block)
Здравствуйте! Работаю над одной из лабораторных работ в университете. При компиляции возникают ошибки Expression:...

Ошибка в switch case: expected primary-expression before '<=' token;
do { cout &lt;&lt; &quot;Ââåäèòå íîìåð ôóíêöèè êîòîðóþ âû õîòèòå èñïîëüçîâàòü:&quot; &lt;&lt; endl; cin &gt;&gt; FunctionChoice; ...

Ошибка компиляции expected primary-expression before
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.H&gt; #include &lt;cstring&gt; #pragma hdrstop #pragma argused using namespace...

Ошибка компиляции expected primary-expression before 'int'
#include &lt;iostream&gt; using namespace std; int func(); int main() { int y; cin &gt;&gt;y; y= func(int); cout &lt;&lt; &quot;Cout A:&quot;&lt;&lt; x; ...

Не компилируется программа, выдает ошибку при компиляции ASM(126) Need expression
Вот собственно задание: создать программы типа .СОМ или .ЕХЕ с выводом на экран индивидуально своих полных фамилий , имен, отчеств и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru