aes*_*aes 3 .net c# linq nullable
我在 C# 可空上下文中使用可空引用类型。
我正在拿一个List<string>,然后将其转换为一个新的List<string?>,就像Select这样。null然后我用 a过滤掉s Where,但底层类型仍然是List<string?>。
strings = strings
.Select(s => method.ThatReturnsNullableString(s))
.Where(s => s is not null)
.ToList();
Run Code Online (Sandbox Code Playgroud)
当我尝试将其用作 时List<string>,我收到 CS8619 编译器警告。一个简单的解决方案是使用! null-forgiving 运算符并且警告消失,但我尝试尽可能少地使用它。
另一个解决方案是使用.Cast<string>,但我认为这会无缘无故地增加运行时开销。
我是否没有向编译器充分证明该集合的类型为string,或者我缺少什么?
.Where(s => s is not null)将抑制仅包含 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
864 次 |
| 最近记录: |