避免“可空值类型可能为空”警告

Bra*_*rad 2 c# visual-studio

我在 lambda 中收到警告,但前面的语句是这样,不,值类型不能为 null。我如何告诉 Visual Studio 不要标记这些误报?Nullable value type may be null.Where(o => o.HasValue)

例如:

var list = new List<int?> { 1, 2, null, 3 };
var query = list
    .Where(o => o.HasValue)
    .Select(o => o.Value);
Run Code Online (Sandbox Code Playgroud)

Cod*_*ter 5

编译器不会执行您的 Linq 表达式。

对它Where()来说是不透明的,您在传递给的表达式中编写的任何内容都Where()不会更改Where()的返回值,因此您Select()仍然对IEnumerable<int?>.

你也可以写Where(o => true)or Where(o => false),它不会改变进入或离开它的集合的类型。

解决方案是告诉编译器知道值不再为空的地方:

.Select(o => o!.Value);
Run Code Online (Sandbox Code Playgroud)

after只是告诉编译器:“相信我,我知道!这里不为空”。oo