我在 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)
编译器不会执行您的 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