【发布时间】:2022-01-22 22:35:10
【问题描述】:
查看此示例:
var list = new List<string?>();
foreach (string item in list.Where(i => i != null))
{
if (item.Length == 2)
{
...
}
}
在这个示例中,我在两个地方得到了可能的空引用。 foreach 变量和 Length 在 if 中的取消引用。第二个我可以通过添加一个该死的(null-forgiving)运算符来轻松修复,如下所示:item!.Length
有没有办法对第一个做同样的事情?我知道我可以将其标记为可空字符串并再次检查,但是我已经检查过了。
【问题讨论】:
-
试试这个 foreach (string? item in list.Where(i => i != null)) 或更好的 foreach (var item in list.Where(i => i != null))
-
是的,这将删除即时警告,但是当我已经检查时,我必须稍后检查该字符串的可空性。我需要一些机制来告诉编译器这个
foreach变量不为空。 -
除了下面的正确答案之外,我还有一个问题:为什么要创建一个包含可为空字符串的列表,因为它已经可以为空?
-
@riffnl 这只是一个示例。我的实际代码不同。但在新的 C# 10 和 .Net 6 表示法字符串(或与此相关的任何其他引用类型)默认情况下不可为空。这意味着您不能将 null 分配给它。它仍然是一个警告,但很快就会出错。
标签: c# .net .net-6.0 nullable-reference-types