我正在使用 Dart 中的一个列表,其中包含可为 null 的元素。我想过滤掉
null
值并拥有一个带有不可为空元素的 List
。这是我正在使用的代码:
List<int?> t = [1, 2, 3, 4, null, 5];
List<int> tWithOutNulls = t.where((e) => e != null).map((e) => e).toList();
但是,这一行给了我一个类型错误:
A value of type 'List<int?>' can't be assigned to a variable of type 'List<int>'.
我可以通过使用非空断言显式转换来修复它:
List<int> tWithOutNulls = t.where((e) => e != null).map((e) => e!).toList();
但我想知道在 Dart 中是否有更优雅或更惯用的方法来实现这一点。例如,在 TypeScript 中,我们可以使用这样的类型保护函数:
function notEmpty<TValue>(value: TValue | null | undefined): value is TValue {
return value !== null && value !== undefined;
}
const array: (string | null)[] = ['foo', 'bar', null, 'zoo', null];
const filteredArray: string[] = array.filter(notEmpty);
在你的情况下,你可以像这样使用
whereType
List<int> tWithOutNulls = t.whereType<int>().toList();