Dart switch语句-大小写表达式必须为常数

时间:2019-07-18 05:29:40

标签: flutter dart switch-statement

我针对其他语言查看了一些与此相关的问题,有人建议使用final,但这似乎不适用于Dart。

我要传递参数,所以确定switch语句不能仅包含常量吗?一个switch语句,就像if语句在询问 if 是否存在。.ie未知,所以我看不到switch语句必须是常量时如何有用... ?

  setCategory(arga, argb) {
    int result;
    switch (true) {
      case (arga >= 0 && arga < 3 && argb < 35):
        result = 16;
        break;
      case (arga >= 0 && arga < 3 && argb >= 35):
        result = 15;
        break;
        etc

它返回有关case表达式中的arga和argb值的错误Case expressions must be constant。解决此问题的最佳方法是什么,还是必须使用if语句?

4 个答案:

答案 0 :(得分:2)

Switch Case有一些规则

  

默认情况是可选的。

     

所有大小写表达式必须唯一。

     

case语句只能包含常量。它不能是变量或表达式。

     

变量的数据类型和case表达式必须匹配。

     

开关中可以有任意数量的case语句。

您应使用'If Else'语句

答案 1 :(得分:1)

确定开关条件表达式必须是常量。

您必须使用if / then链基于非恒定值进行多次测试。

在切换情况下,不能使用周围函数的参数。 Dart switch语句不支持您要在此处执行的操作。

故意将Dart switch语句保持非常简单,以便编译器可以在编译时知道所有可能的情况。这就是为什么它们必须是编译时常量的原因。

switch语句对于某些类型的切换仍然有用,例如枚举:

enum Nonse { foo, bar, baz; }

String fooText(Nonse non) {
  switch (non) {
    case Nonse.foo: return "foo";
    case Nonse.bar: return "bar";
    case Nonse.baz: return "baz";
  }
  throw ArgumentError.notNull("non");
}

您还可以切换常量字符串值或整数值。

答案 2 :(得分:0)

switch语句需要一个常量->这意味着已初始化且具有最终值的变量

switch (expression) {
  case ONE : {
      statement(s);
  }
  break;
  case TWO: {
      statement(s);
  }
  break;
  default : {
      statement(s);
  }
}

答案 3 :(得分:0)

for(int x=0; x<1; x++){
if(ing5<8 && toWhatDegreeRand<=10 && toWhatDegreeRand>7){
  toWhatDegreeRand=9;
}
if(ing4<8 && toWhatDegreeRand<=7 && toWhatDegreeRand>5){
  toWhatDegreeRand=6;
}
if(ing3<8 && toWhatDegreeRand<=5 && toWhatDegreeRand>3){
  toWhatDegreeRand=4;
}//....

}

它可能有点用。