Flutter 无法将动态向下转换为列表<;int>;在地图上使用时
让我们从以下几点开始:Flutter 无法将动态向下转换为列表<;int>;在地图上使用时,flutter,dart,Flutter,Dart,让我们从以下几点开始: dynamic list = [1]; var ints = list as List<int>; // Works 这次我正在做同样的事情,list属于dynamic类型,我正在将其向下转换为list,但是失败了,出现了一个错误: 'List'不是类型转换中类型'List'的子类型 谁能告诉我为什么第一个代码有效,而第二个失败 注意:我不是在寻找如何使第二个代码工作的解决方案,我知道如何做到这一点。问题是,第一个代码动态可以降级到列表,但第二个代码不能降
dynamic list = [1];
var ints = list as List<int>; // Works
这次我正在做同样的事情,list
属于dynamic
类型,我正在将其向下转换为list
,但是失败了,出现了一个错误:
'List'
不是类型转换中类型'List'
的子类型
谁能告诉我为什么第一个代码有效,而第二个失败
注意:我不是在寻找如何使第二个代码工作的解决方案,我知道如何做到这一点。问题是,第一个代码
动态
可以降级到列表
,但第二个代码不能降级。为什么会这样?尝试通过打印runtimeType来查看您得到的类型
dynamic list = [1];
print(list.runtimeType);
var ints = list as List<int>; // Works
动态列表=[1];
打印(list.runtimeType);
var ints=以列表形式列出;//作品
及
var jsonString='{“0”:[1]}';
var-Map-Map=jsonDecode(jsonString);
动态列表=映射['0'];
打印(list.runtimeType);
var ints=以列表形式列出;//失败
但这可能与[1]
被识别为列表有关,显然可以将其转换为列表。但是因为您的地图是
,所以它可以是地图['0']
中的任何类型,并且不能强制转换
通过使用List.from()
List ints=List.from(map['0'])代码>
尝试通过打印runtimeType来查看您得到的类型
dynamic list = [1];
print(list.runtimeType);
var ints = list as List<int>; // Works
动态列表=[1];
打印(list.runtimeType);
var ints=以列表形式列出;//作品
及
var jsonString='{“0”:[1]}';
var-Map-Map=jsonDecode(jsonString);
动态列表=映射['0'];
打印(list.runtimeType);
var ints=以列表形式列出;//失败
但这可能与[1]
被识别为列表有关,显然可以将其转换为列表。但是因为您的地图是
,所以它可以是地图['0']
中的任何类型,并且不能强制转换
通过使用List.from()
List ints=List.from(map['0'])代码>
谁能告诉我为什么第一个代码有效,而第二个失败
第一个代码,您已经有了一个列表
(或者可能有一个实现列表
的JsArray
)。所以打字很有效
第二个代码,您没有列表
。您有一个实现列表的JsArray
。但不能将其类型转换到列表中。因为事实并非如此
如果你想知道为什么列表
不是列表
,可以这样想:动物列表不是狼列表。里面也可能有羊。如果你想要一个狼群列表,你必须转换原始列表,而不仅仅是打字
谁能告诉我为什么第一个代码有效,而第二个失败
第一个代码,您已经有了一个列表
(或者可能有一个实现列表
的JsArray
)。所以打字很有效
第二个代码,您没有列表
。您有一个实现列表的JsArray
。但不能将其类型转换到列表中。因为事实并非如此
如果你想知道为什么列表
不是列表
,可以这样想:动物列表不是狼列表。里面也可能有羊。如果你想要一个狼的列表,你必须转换原始列表,而不仅仅是键入它。如果我对答案投了否决票,我肯定希望那些用户也会对这篇文章投否决票。但是如果你是其中一个没有回答并投反对票的人,我很想听听你投反对票的原因。如果我投反对票,我当然希望那些用户也会投反对票。但是如果你是其中一个没有回答并投反对票的人,我很想听听你投反对票的原因。@iLoveDocs我在我的答案中添加了,因为你的地图可以是地图['0']中的任何类型,并且不能被铸造
,这就是为什么我在第二个代码中为列表
使用动态
,在第一个代码中也是如此。一个符合列表的条件,另一个不符合,这就是问题所在@伊洛维多克这是我的猜测。我发现了一个关于dart github的讨论,它可能对我在回答中添加的@iLoveDocs很感兴趣,因为你的地图可以是地图['0']中的任何类型,并且不能进行铸造
,这就是为什么我在第二个代码中为列表
使用动态
类型,在第一个代码中我也是如此。一个符合列表的条件,另一个不符合,这就是问题所在@伊洛维多克这是我的猜测。我发现一个关于dart github的关于铸造的讨论可能很有趣
var jsonString = '{"0": [1]}';
var Map<String, dynamic> map = jsonDecode(jsonString);
dynamic list = map['0'];
print(list.runtimeType);
var ints = list as List<int>; // Fails