Dart:在运行时确定/检查列表类型

Dart:在运行时确定/检查列表类型,dart,Dart,如果我们测试这个 print([1] is List<int>); // prints true List a = [1]; print(a is List<int>); // prints false 打印([1]是列表);//打印正确 如果我们测试这个 print([1] is List<int>); // prints true List a = [1]; print(a is List<int>); // prints false

如果我们测试这个

print([1] is List<int>); // prints true
List a = [1];
print(a is List<int>); // prints false
打印([1]是列表);//打印正确
如果我们测试这个

print([1] is List<int>); // prints true
List a = [1];
print(a is List<int>); // prints false
列表a=[1];
打印(列表);//打印错误
这在技术上是正确的,因为列表稍后可能会获得另一种类型的对象


有没有办法通过元素来确定列表的类型,或者我需要使用循环来检查每个元素的类型?

关于第二个示例,您错了。下面返回
false
的原因是您使用
List
作为类型,而不是使用
var
final
List

但如果改为让Dart自动分配变量类型,如:

final a = [1]; // or var
print(a is List<int>); // prints true
print(a.runtimeType); // List<int>
final a=[1];//或变量
打印(列表);//打印正确
打印(a.runtimeType);//列表
然后,在创建列表时,Dart将静态地查看列表的内容,并指定正确的类型

List
读取为
List
的特性称为隐式动态,当引入不可为空时,该特性将消失。如果您遵循以下指南,也可以立即禁用此功能:

如果禁用此功能,Dart分析器将出现错误:

缺少列表文字的类型参数。尝试添加显式类型,如“dynamic”,或在分析选项文件中启用隐式dynamic


第二个例子你错了。下面返回
false
的原因是您使用
List
作为类型,而不是使用
var
final
List

但如果改为让Dart自动分配变量类型,如:

final a = [1]; // or var
print(a is List<int>); // prints true
print(a.runtimeType); // List<int>
final a=[1];//或变量
打印(列表);//打印正确
打印(a.runtimeType);//列表
然后,在创建列表时,Dart将静态地查看列表的内容,并指定正确的类型

List
读取为
List
的特性称为隐式动态,当引入不可为空时,该特性将消失。如果您遵循以下指南,也可以立即禁用此功能:

如果禁用此功能,Dart分析器将出现错误:

缺少列表文字的类型参数。尝试添加显式类型,如“dynamic”,或在分析选项文件中启用隐式dynamic


我不是要反对你或任何事情,只是为了“你错了…”部分,
List a=[1];var s=a;打印列表仍然打印错误。请编辑您的答案,如果我错了,请纠正我。非常感谢您抽出时间!我实际上接受这个列表作为函数参数。那么,有没有办法将列表从该类型中释放出来,或者使其类型在这些方面更具动态性(在检查时)。列表的类型在初始化时定义,并且该类型随后在对象上,并且如果将其分配给另一种类型的变量,则不会更改。同样,在您的示例中,Dart试图通过自动将您的代码设置为:
lista=[1]
您确定您的方法将列表作为参数,而不关心类型吗?因为您应该使用泛型正确地编写该方法。你能提供一个你的方法的例子吗?我不是反对你或任何东西,只是为了“你错了…”部分,
List a=[1];var s=a;打印列表仍然打印错误。请编辑您的答案,如果我错了,请纠正我。非常感谢您抽出时间!我实际上接受这个列表作为函数参数。那么,有没有办法将列表从该类型中释放出来,或者使其类型在这些方面更具动态性(在检查时)。列表的类型在初始化时定义,并且该类型随后在对象上,并且如果将其分配给另一种类型的变量,则不会更改。同样,在您的示例中,Dart试图通过自动将您的代码设置为:
lista=[1]
您确定您的方法将列表作为参数,而不关心类型吗?因为您应该使用泛型正确地编写该方法。你能提供一个你的方法的例子吗?