相关疑难解决方法(0)

在 switch 语句中检查 Dart 运行时类型

我在尝试检查 Dart 中某些对象的运行时类型时发现了一些奇怪的行为。我们举一个简单的例子:

main(List<String> args) {
  List<Map> l1 = new List<Map>();
  l1.add(new Map<String, int>());
  List<int> l2 = ['Start', 'Stop'];
  checkType(l1.runtimeType);
  checkType(l1[0].runtimeType);
  checkType(l2.runtimeType);
}

checkType(Type type) {

  switch(type) {
    case List:
      print('it is a List!');
      break;
    case Map:
      print('it is a List!');
      break;
    default:
      print('Unmanaged type $type');
      break;
  }
}
Run Code Online (Sandbox Code Playgroud)

这个程序有以下输出:

非托管类型List<Map> 非托管类型_InternalLinkedHashMap<String, int> 非托管类型List

第一种情况无法在 switch 语句中检查,因为如果我尝试设置“ List<Map>”情况,我会收到错误:在常量表达式中,此运算符的操作数必须是“num”类型第二个无法匹配,因为使用case 中的 _InternalLinkedHashMap 得到以下错误:Case expression must be constant。

在最后一种情况下,我将 List 定义为一个整数列表 ( List<int>),但系统忽略了它并将其视为一个简单的 List。我认为这是一种误导,应该禁止这样的声明。

任何帮助/建议?

types switch-statement dart

4
推荐指数
1
解决办法
2000
查看次数

标签 统计

dart ×1

switch-statement ×1

types ×1