提问人:Brad 提问时间:3/2/2023 最后编辑:Patrick McDonaldBrad 更新时间:3/3/2023 访问量:630
避免“可以为 null 的值类型可能为 null”警告
Avoid "Nullable value type may be null" warning
问:
我在 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);
答:
3赞
CodeCaster
3/3/2023
#1
编译器不会执行 Linq 表达式。
对它是不透明的,您在传递给的表达式中编写的任何内容都不会更改 的返回值,因此您仍然在 .Where()
Where()
Where()
Select()
IEnumerable<int?>
你也可以写 or ,它不会改变进入或离开它的集合的类型。Where(o => true)
Where(o => false)
解决方案是告诉编译器您知道值不再为 null 的位置:
.Select(o => o!.Value);
之后只是告诉编译器:“相信我,我知道这里不是空的”。!
o
o
评论
0赞
Brad
3/3/2023
一个不幸的妥协,但它有效。在 C# 和 Typescript 之间来回切换,似乎 Typescript 会解决这个问题。
评论
.Where(o => o.HasValue).Select(o => o!.Value)
.Where(o => o.HasValue)
!