Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Модератор
 Аватар для Curry
5153 / 3450 / 536
Регистрация: 01.06.2013
Сообщений: 7,514
Записей в блоге: 9

Непонятка с enum+switch

17.12.2024, 14:58. Показов 2402. Ответов 29

Студворк — интернет-сервис помощи студентам
Привет всем!

Решил сделать разные действия по нажатию клавиш ($host.UI.RawUI.ReadKey), однако
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
enum VirtualKeyCode {
    D = 0x44
    Q = 0x51    
    S = 0x53 
}
 
$key = 0x51
 
[VirtualKeyCode]::Q -eq $key
 
switch($key){
    [VirtualKeyCode]::Q {
        Write-Host 'Q'
    }
    Default {
        Write-Host 'not Q'
    }
}
Вывод:
Code
1
2
True
not Q
Почему в switch-е [VirtualKeyCode]::Q не равно $key когда по -eq равно?
Если так
PowerShell
1
2
switch($key){
    {[VirtualKeyCode]::Q -eq $_} {
то будет правильно
Code
1
2
True
Q
Но почему?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.12.2024, 14:58
Ответы с готовыми решениями:

Switch and enum
Имеется такой код public class Solution { public static enum E1 {A, B, C, Y} public static enum E2 {D, E, F} ...

Switch по enum
есть некий enum который используется как флаговый, если установлены несколько полей то одно действие или другое... я хочу пройтись свитчем...

Switch case и enum
делаю калькулятор с помощью switch case у меня ошибку выдает на 20 строке bool plus = false; bool minus =...

29
Любознательный
 Аватар для YuS_2
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,192
18.12.2024, 16:22
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Curry Посмотреть сообщение
Но от switch-а я всё таки интуитивно ожидал что он будет эквивалентен обычным сравнениям выражения внутри switch() со всеми его вариантами.
Ну, таким уж несовершенным, powershell родился и вырос... однообразия и стабильности во всех вариантах от него ждать не следует. Просто надо помнить, что явная типизация в большинстве случаев лучше, чем неявная и скрытая, т.к. иногда сложно предугадать, что в итоге получится. Тем более, что, например, в его родственнике C#, таких вольностей вообще не допускают...

Цитата Сообщение от Curry Посмотреть сообщение
Тех кто пользуется светлой темой форума не раздражает что символы пунктуации отображаемые светло-морковным цветом практически не видны?
Есть такое дело...
1
18.12.2024, 16:43

Не по теме:

Цитата Сообщение от Curry Посмотреть сообщение
Тех кто пользуется светлой темой форума



Не по теме:

А есть темная? мне светлая уже съела глаза ))

0
 Аватар для alhaos
1927 / 544 / 153
Регистрация: 20.02.2019
Сообщений: 2,659
Записей в блоге: 65
18.12.2024, 16:47
Цитата Сообщение от YuS_2 Посмотреть сообщение
просто читай внимательнее
Лучше просто будь точнее.
0
Любознательный
 Аватар для YuS_2
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,192
18.12.2024, 17:55
Цитата Сообщение от alhaos Посмотреть сообщение
Лучше просто будь точнее.
от же заноза... Я сам зануда тот ещё, но ты меня переплюнул
ок, буду точнее... хотя куда ещё точнее, ссылки же есть
0
18.12.2024, 20:36  [ТС]

Не по теме:

Цитата Сообщение от lesser Посмотреть сообщение
А есть темная? мне светлая уже съела глаза ))
Я, честно признаться, не в курсе как переключиться на тёмную, но периодически вижу скриншоты, например, https://www.cyberforum.ru/abou... st17365694 .
Спросите Hrethgir -а как он этого добился.

0
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,811
20.12.2024, 16:50
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
enum VirtualKeyCode {
    A=0x41;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z
}
 
$keys = 0x44, 0x51, 0x53;
 
switch ([VirtualKeyCode[]]$keys)
{
        D       { "ДЭ" }
        Q       { "КУ" }
        S       { "ЭС" }
        default { "НЕПОНЯТНО ЧТО ($_)" }
}
Добавлено через 11 минут
PS: при появлении ключа вне представленного в enum набора выпадаем в Exception.
Как с этим бороться ( в смысле обработать данный ключ в Default ) - непонятно.
0
Модератор
 Аватар для Curry
5153 / 3450 / 536
Регистрация: 01.06.2013
Сообщений: 7,514
Записей в блоге: 9
20.12.2024, 16:52  [ТС]
volodin661, а если пользователь нажмёт небуквенную клавишу будет исключение. Его, конечно, можно поймать, но лучше без них.
0
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,811
20.12.2024, 16:56
Curry, сгенерить описание enum по всем физически возможным ключам вполне приемлемое решение нмв

Думал, что уже есть такое готовое, но не нашёл
0
Модератор
 Аватар для Curry
5153 / 3450 / 536
Регистрация: 01.06.2013
Сообщений: 7,514
Записей в блоге: 9
20.12.2024, 17:14  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
Думал, что уже есть такое готовое, но не нашёл
iNNOKENTIY21 уже подсказал: Непонятка с enum+switch
PowerShell
1
[System.ConsoleKey]
0
 Аватар для volodin661
6627 / 2258 / 346
Регистрация: 10.12.2013
Сообщений: 7,811
20.12.2024, 17:44
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
enum VirtKeyCode {
A=0x41;B;C;D;;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;Unknown=0x00
}
 
filter MyFilter { [Enum]::IsDefined([VirtKeyCode],$_) ? $_ : [VirtKeyCode]::Unknown } 
 
$keys =  (0x44, 0x51, 0x53, 0x48, 0x100, 255) | MyFilter;
 
 
    switch ([VirtKeyCode[]]$keys)
    {
    
        D       { "ДЭ" }
        Q       { "КУ" }
        S       { "ЭС" }
        Unknown { "ХЕР ЗНАЕТ ЧТО" }
        
        default { "НЕОБРАБАТЫВАЕМОЕ: $_" }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2024, 17:44
Помогаю со студенческими работами здесь

Enum ломается в операторе Switch
Добрый вечер форумчане, нужен ваш бесценный совет для начинающего программиста. Есть в задании один момент, который не дает мне покоя:...

enum, switch/case и socket
дан enum packet { LetsPlay, StartConfirmed, StartDeclined }; далее пытаюсь его использовать void __fastcall...

Перечисляемый тип enum + switch
Всем привет, прошу помочь разобраться, делаю структуры и все никак не могу сделать так , чтобы заработал фрагмент программы связанный с...

Игра с использованием do while + enum + switch
Условие игры - стрелять до тех пор, пока человечек не умрет (здоровье < 0) либо мы спасаем его, не давая умереть. Изначальный уровень...

ENUM в {SWITCH.CASE} не работает с атрибутами
Имеется следующий enum: public enum ComboBoxContents { WIRE, MOTOR_PROTECTION_CB,


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru