List Dart中的混合类型列表

List Dart中的混合类型列表,list,dart,List,Dart,这在Dart中编译: var数据=[“abcd”,34,“ef”,false]; int n=数据[1]; 打印(n*2);//->68 我认为列表元素应该是相同类型的。并且在A)中没有从int到string或从bool到string的隐式转换: 打印(数据[1]为int);//->真的 打印(数据[3]为布尔值);//->真的 打印(数据[1]为字符串);//->假的 编辑:正如Mattia指出的,以下几行中的真正错误与在列表初始化中交换元素无关,而是从A)复制/粘贴到B)留下相同的索引(

这在Dart中编译:

var数据=[“abcd”,34,“ef”,false];
int n=数据[1];
打印(n*2);//->68
我认为列表元素应该是相同类型的。并且在A)中没有从int到string或从bool到string的隐式转换:

打印(数据[1]为int);//->真的
打印(数据[3]为布尔值);//->真的
打印(数据[1]为字符串);//->假的
编辑:正如Mattia指出的,以下几行中的真正错误与在列表初始化中交换元素无关,而是从A)复制/粘贴到B)留下相同的索引([1])

这不会编译(“abcd”替换为34):

var数据=[34,“abcd”,“ef”,false];//->类型错误
int n=数据[1]//编辑:这是无意义的,应为数据[0](未生成错误)
打印(n*2);


为什么??某种替代原则在起作用?

如果希望列表只接受一种类型,则需要添加一种
通用类型,例如:

var数据=[“abcd”,34,“ef”,false];//->错误
默认情况下,如果不添加一个变量,将使用“最常见类型”(在本例中为对象),并且它将接受所有变量类型


第二个示例确实编译了,但给出了一个运行时错误,因为
数据[1]
不是
int
,而是
字符串,在Mattia回答后编辑了我的帖子,指出了真正的编译错误原因。谢谢你,马蒂亚。现在我对dynamic的灵活性有了更好的理解:有了它(我在没有意识到的情况下使用了它),我们可以混合所有东西,比如:
var mixed=[newlist(3),“hello”,67,3.14];(混合[0]作为列表)[0]=3434;打印((混合[0]作为列表)[0]);//->3434