0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 61
.NET 5

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

19.10.2021, 18:56. Показов 2278. Ответов 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
1317 / 897 / 200
Регистрация: 09.09.2011
Сообщений: 2,692
Записей в блоге: 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
3439 / 2759 / 575
Регистрация: 04.09.2018
Сообщений: 8,686
Записей в блоге: 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
1317 / 897 / 200
Регистрация: 09.09.2011
Сообщений: 2,692
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru