int int1 = 1;
int int2 = 2;
switch(int1)
{
   case int2:
      doSomething();
      break;
}

Вот пример того, когда я получаю эту ошибку, есть ли способ сделать что-то подобное, не получая ошибки «CS0150: ожидается постоянное значение», или мне нужно использовать операторы if?

c#
0
RamenNoodle93 9 Окт 2021 в 18:46

2 ответа

Лучший ответ

Вам нужно будет использовать оператор if, чтобы выполнить то, что вы хотите, или сделать int2 const.

Точка учебников хорошо объясняет это:

Следующие правила применяются к оператору switch -

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

В переключателе может быть любое количество операторов case. За каждым регистром следует значение для сравнения и двоеточие.

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

Когда включаемая переменная равна case, операторы, следующие за этим case, будут выполняться до тех пор, пока не будет достигнут оператор break.

Когда достигается оператор break, переключатель завершается, и поток управления переходит на следующую строку, следующую за оператором switch.

Не в каждом случае нужно иметь перерыв. Если паузы не появятся, это вызовет ошибку времени компиляции.

Оператор switch может иметь необязательный регистр по умолчанию, который должен находиться в конце переключателя. Случай по умолчанию может использоваться для выполнения задачи, когда ни один из вариантов не является истинным.

1
luxdvie 9 Окт 2021 в 15:50

Это должно быть case 2, а не case int2. case должно иметь постоянное значение, а не переменную.

1
vivek nuna 9 Окт 2021 в 15:50