提问者:小点点

Foreach变量未为空检查后仍然给出警告


请参见此示例:

var list = new List<string?>();

foreach (string item in list.Where(i => i != null))
{
    if (item.Length == 2)
    {
        ...
    }
}

在此示例中,我在两个地方获得了可能的空引用。的Foreach变量和解除引用的长度if。第二个我可以很容易地通过添加一个像这样的该死的(空原谅)运算符来修复:项目!。长度

有没有办法对第一个做同样的事情?我知道我可以将其标记为可为空的字符串,并再次检查,但是,我已经检查过了。


共1个答案

匿名用户

使用Where应用筛选时,可以消除所有空值,但这不会更改值的类型
您只需将筛选后的结果强制转换为正确的类型:

foreach (string item in list.Where(i => i != null).Select(x => x!))

相关问题