我可以在Dart的开关盒中使用'is'操作符吗?

问题描述 投票:0回答:1

我觉得这是一个愚蠢的问题,但我无法让它发挥作用。

是)我有的:

if (current is classA){
   //do stuff
   return;
}
if (current is classB){
   //do stuff
   return;
}
if (current is classC){
   //do stuff
   return;
}

我想要的是:

switch (currentState) {
   case is classA: { 
      //do stuff
      break;
   }
   case is classB: { 
      //do stuff
      break;
   }
   case is classC: { 
      //do stuff
      break;
   }
}

我真正想要的是什么(Kotlin):

When (currentState){
   is classA -> //do stuff
   is classB -> //do stuff
   is classC -> //do stuff
}

无论如何我可以像Kotlins When操作员一样使用Dart Switch,或者至少使用其他操作符==来断言案例评估?

dart switch-statement
1个回答
1
投票

没有。

Dart开关盒是一个非常低级的结构。它只允许不覆盖运算符==的常量值表达式(少数基本平台类型除外),因此可以使用identical检查实现它。

没有能力进行复杂的检查,或检查对象的类型,只能进行身份检查。

推荐的美妙方法是让ClassA,ClassB和ClassC都实现与doStuff成员的接口,然后执行:

 currentState.doStuff()

如果那是不可能的,那么你回到了if序列。

© www.soinside.com 2019 - 2024. All rights reserved.