165 / 132 / 45
Регистрация: 07.05.2017
Сообщений: 1,002
1

Можно ли в кейсы оператора switch() прописывать условия, вместо заранее известных значений ?

18.10.2019, 06:05. Показов 454. Ответов 10
Метки нет (Все метки)

пытаюсь определенный промежуток хп (например от 20 до 40) вбить в условие кейса, не получается. может такое нельзя делать ?

Добавлено через 5 минут
хп у меня float. цель : задать перечислению состояния при определенных промежутках числового значения хп.
я конечно сделал через if-ы, но вопрос по switch все таки интересен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2019, 06:05
Ответы с готовыми решениями:

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

DBParameters для условия in, если количество и значение всех значений в in заранее не известно
имеется запрос типа Select * from MyTable where Column1 in (2,5,9) то есть необходимо при...

Как в as3 можно избавиться от оператора switch-case?
Добрый день! Использую в программе фабрику создания экземпляров животных public class...

Хранение заранее известных данных в android
Мне надо в приложении хранить довольно много информации, только эту информацию я знаю все заранее,...

10
Эксперт .NET
5560 / 3612 / 1493
Регистрация: 09.05.2015
Сообщений: 8,674
18.10.2019, 06:21 2
В C# 8.0 можно, но Unity в C# 8.0 не умеет, поддержка этой версии языка в Unity планируется только в следующем году.

https://forum.unity.com/thread... rt.663757/

Добавлено через 11 минут
Хотя по идее вот такое должено работать уже
C#
1
2
3
4
        enum EN
        {
            A, B, C
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        float x = 10.1f;
        EN y;
 
        switch (x)
        {
            case var _ when x > 0 && x <= 10:
                y = EN.A;
                break;
            case var _ when x > 10 && x <= 20:
                y = EN.B;
                break;
            case var _ when x > 20 && x <= 30:
                y = EN.C;
                break;
        }
А вот такое в C# 8.0
C#
1
2
3
4
5
6
7
8
            float x = 10.1f;
 
            EN y = x switch
            {
                _ when x > 0 && x <= 10 => EN.A,
                _ when x > 10 && x <= 20 => EN.B,
                _ when x > 20 && x < 30 => EN.C
            };
1
165 / 132 / 45
Регистрация: 07.05.2017
Сообщений: 1,002
18.10.2019, 06:31  [ТС] 3
спасибо ! все работает !
0
248 / 185 / 67
Регистрация: 04.03.2019
Сообщений: 1,010
18.10.2019, 10:25 4
Цитата Сообщение от Someone007 Посмотреть сообщение
var _ when x > 0 && x <= 10:
а что это за выражение вообще?
ссылку киньте пожалуйста почитать или обьясните.
логично понимаю что условие
0
198 / 141 / 57
Регистрация: 06.07.2011
Сообщений: 299
18.10.2019, 12:21 5
Позволяет отбрасывать значения когда они не нужны, что-то в духе не именованной переменной.

https://csharp.today/c-7-0-discards/
0
165 / 132 / 45
Регистрация: 07.05.2017
Сообщений: 1,002
18.10.2019, 14:24  [ТС] 6
https://metanit.com/sharp/tutorial/3.4.php

Добавлено через 14 минут
еще вопросик , дабы не плодить лишние темы...
на счет свойств. задаю переменную float нр. затем дублирую поле похожим именем (инициализирую, если я правильно выражаюсь) задаю свойство ,бы что бы не возможно было ввести отрицательное значение либо больше максимального...
то есть :
C#
1
2
3
4
5
6
7
public float HP;
 
public float HP hp 
{
get {return HP;}
set{ if (value < 0 ) value = 0;}
}
потом в старте вывожу эту переменную на консоль. результат таков , что выводится то ,что я ввел в инспекторе. не важно , положительное число или отрицательное. то есть получается свойство так не работает. что я делаю не так ?
0
288 / 238 / 127
Регистрация: 24.12.2014
Сообщений: 707
18.10.2019, 14:50 7
Цитата Сообщение от Gammister Посмотреть сообщение
if (value < 0 ) value = 0;
Ты перезаписываешь только "value", но не задаёшь его переменной:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public float HP;
 
public float hp { // HP ?
    get { return HP; }
    set{
        if( value < 0 ) 
            value = 0;
        HP = value; // <-- задать новое значение для "HP"
    }
}
 
void Start() {
    Debug.log( HP );
    hp = -25;
    Debug.log( HP );
    hp = 25;
    Debug.log( HP );
}
//
0
0
25
0
165 / 132 / 45
Регистрация: 07.05.2017
Сообщений: 1,002
21.10.2019, 16:27  [ТС] 8
все работает, но если задавать в реальном времени в инспекторе, то свойство не работает.
это нормально ?
0
248 / 185 / 67
Регистрация: 04.03.2019
Сообщений: 1,010
21.10.2019, 17:56 9
Gammister,
а как оно узнает что нужно set сделать?
0
165 / 132 / 45
Регистрация: 07.05.2017
Сообщений: 1,002
21.10.2019, 18:03  [ТС] 10
понял
0
289 / 211 / 84
Регистрация: 17.02.2016
Сообщений: 1,233
Записей в блоге: 1
22.10.2019, 03:28 11
а почему именно с хп нужно switch применить?
если сравнивать int или float то и IF ELSE неплохо справляются
если конечно string сравнивать это использует больше ресурсов, а при стравнении int или float это не критично
switch можно кудато в другое место запихнуть
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2019, 03:28

Можно ли как-то заставить сработать одновременно все case у оператора switch?
Вопрос в заголовке темы:)

Фильтр заранее известных колонок по типу данных
Добрый день, тут вопрос такой возник, если у меня есть список колонок, и мне нужно узнать их...

Динамически построить функцию, которая будет комбинацией заранее известных функций
Цель - динамически построить функцию, которая будет комбинацией заранее известных функций. ...

Придумайте простую программу с использованием условного оператора IF и оператора switch
Пожалуйста, придумайте простую программу с использованием: условного оператора IF и оператора...

Вместо несуществующих элементов в матрице автоматически прописывать нули
Как сделать в MATLAB, чтобы вместо несуществующих элементов в матрице автоматически прописывались...

Запись в БД не известных значений
Всем доброго времени суток) Возникла такая проблема. Есть форма к которой добавляются поля...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru