Dart switch 语句 - Case 表达式必须是常量

Has*_*sen 7 switch-statement dart flutter

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

我正在传递参数,所以 switch 语句肯定不能只包含常量吗?switch语句,如果一个很像语句问,如果它是或not..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
Run Code Online (Sandbox Code Playgroud)

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

lrn*_*lrn 11

switch case 表达式肯定是常量。

您必须使用if/then链根据非常量值进行多项测试。

您不能在 switch case 中使用来自周围函数的参数。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");
}
Run Code Online (Sandbox Code Playgroud)

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


Sae*_*adi 6

Switch Case 有一些规则

默认情况是可选的。

所有 case 表达式必须是唯一的。

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

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

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

你应该使用“If Else”语句