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

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

19.10.2021, 18:56. Показов 2212. Ответов 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
1311 / 889 / 200
Регистрация: 09.09.2011
Сообщений: 2,632
Записей в блоге: 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
3399 / 2721 / 574
Регистрация: 04.09.2018
Сообщений: 8,545
Записей в блоге: 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
1311 / 889 / 200
Регистрация: 09.09.2011
Сообщений: 2,632
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru