对于简单的数据类型,您可以使用例如
object is String
以检查Object变量是否属于更具体的类型。
但是假设你有一个List,但是想检查它是否是一个String的List,直觉上我们可以尝试
List list = ['string', 'other string'];
print(list is List<String>);
其返回假。
类似地,使用List.cast()方法也没有帮助,它总是会成功,只是在稍后使用列表时抛出一个错误。
我们可以遍历整个列表并检查每个条目的类型,但我希望有更好的方法。
3条答案
按热度按时间taor4pac1#
没有其他方法。您拥有的是
List<Object?>
/List<dynamic>
(因为类型是从变量类型推断的,变量类型是一个原始的List
类型,它被示例化到它的绑定)。列表 currently 只包含String
对象,但没有什么阻止您向其中添加new Object()
。所以对象本身并不知道它只包含字符串,你必须查看每个元素来检查它.
或者,当你创建一个列表的时候,只要声明变量为
List<String> list = ...;
或var list = ...;
,那么对象就是List<String>
,如果你不是创建列表的人,那么它又回到list.every((e) => e is String)
。wgeznvg72#
List中的每个元素可以是任何类型,但是如果您确信所有元素都具有相同的类型,那么这种方法可能会很有用
b1payxdu3#
我认为更好的方法是对数据类型进行具体说明。
通过指定变量的类型,可以在开发过程的早期捕获潜在的错误。
此外,指定变量的类型使代码更易读和理解。
此外,指定类型还可以提高代码的性能,因为编译器可以根据变量的类型进行某些优化。
您可以使用此linter规则来强制执行它:
https://dart-lang.github.io/linter/lints/always_specify_types.html