我正在C#的可空上下文中使用可空引用类型。
我使用Select
将List<string>
转换为一个新的List<string?>
,然后通过Where
过滤掉null
值,但底层类型仍然是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
,还是有什么我不知道的事情?
method.ThatReturnsNullableString(s)
的签名。 - Enigmativityvar strings = strings
是无效的 C# 代码。请给我们真正的代码。 - Enigmativity.Cast<string>()
没有额外的开销,因为你必须这样做。 - Enigmativitystrings
是一个List<string?>
,示例方法可能类似于string Method(string? s)
。 - aes