如何从 Dart 列表中过滤掉空值,同时保证类型安全?

问题描述 投票:0回答:1

我正在使用 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);
dart
1个回答
0
投票

在你的情况下,你可以像这样使用

whereType

List<int> tWithOutNulls = t.whereType<int>().toList();
© www.soinside.com 2019 - 2024. All rights reserved.