Bre*_*ton 7 dart dart-null-safety
我有一个飞镖列表:
List<String?> vals;
Run Code Online (Sandbox Code Playgroud)
我想删除任何空值并将其转换为List<String>. 我试过了:
List<String> removeNulls(List<String?> list) {
return list.where((c) => c != null).toList() as List<String>;
}
Run Code Online (Sandbox Code Playgroud)
在运行时,我收到以下错误:
List<String?>' is not a subtype of type 'List<String>?'
Run Code Online (Sandbox Code Playgroud)
解决这个问题的正确方法是什么?
理想情况下,您首先从 a 开始List<String>。如果您正在构建您的列表,例如:
String? s = maybeNullString();
var list = <String?>[
'foo',
'bar',
someCondition ? 'baz' : null,
s,
];
Run Code Online (Sandbox Code Playgroud)
那么你可以使用 collection-if来避免插入null元素:
String? s = maybeNullString();
var list = <String?>[
'foo',
'bar',
if (someCondition) 'baz',
if (s != null) s,
];
Run Code Online (Sandbox Code Playgroud)
null从 an 中过滤掉值Iterable<T?> 并获得Iterable<T>结果的一种简单方法是使用.whereType<T>(). 例如:
var list = <String?>['foo', 'bar', null, 'baz', null];
var withoutNulls = list.whereType<String>().toList();
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用 collection-for和 collection- if:
var list = <String?>['foo', 'bar', null, 'baz', null];
var withoutNulls = <String>[
for (var s in list)
if (s != null) s
];
Run Code Online (Sandbox Code Playgroud)
最后,如果您需要转换 a 的元素,List则可以使用其他选项List.from:
var list = <String?>['foo', 'bar', null, 'baz', null];
var withoutNulls = List<String>.from(list.where((c) => c != null));
Run Code Online (Sandbox Code Playgroud)
或者如果您不想创建新的List, Iterable.cast:
var list = <String?>['foo', 'bar', null, 'baz', null];
var withoutNulls = list.where((c) => c != null).cast<String>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |