gpt4 book ai didi

c# - 如何获取 C# 空状态以将 List 转换为 List

转载 作者:行者123 更新时间:2023-12-05 08:45:09 29 4
gpt4 key购买 nike

我正在使用 nullable reference types在 C# 可为 null 的上下文中。

我正在服用 List<string> , 然后将其转换为新的 List<string?>Select像这样。然后我过滤掉 null带有 Where , 但基础类型仍然是 List<string?> .

strings = strings
.Select(s => method.ThatReturnsNullableString(s))
.Where(s => s is not null)
.ToList();

当我尝试将其用作 List<string> 时,我收到 CS8619 编译器警告。一个简单的解决方案是使用 ! null-forgiving operator并且警告消失了,但我尽量少用它。

另一个解决方案是使用 .Cast<string> ,但我认为这会无缘无故地增加运行时开销。

我是否没有向编译器充分证明该集合的类型是 string ,还是我遗漏了什么?

最佳答案

.Where(s => s is not null)将抑制仅空项目并保留 string? 类型的项目, 所以结果的类型是 List<string?> .

使用 .OfType<string>() , 它将跳过空值并强制转换 string?到字符串,相当于.Where(s => s is not null).Cast<string>() .

strings = strings
.Select(s => method.ThatReturnsNullableString(s))
.OfType<string>()
.ToList(); // List<string>

关于c# - 如何获取 C# 空状态以将 List<T?> 转换为 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73956460/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com