已做空值检查仍触发Roslyn CS8600警告,求原因解析
Roslyn CS8600警告出现的原因
你已经对accCol、aColors及aColors.accentColorsList做了空值检查,但执行AccentColors res = aColors.accentColorsList.Find(x => x.ColorValue == accCol);时仍收到CS8600警告,核心原因如下:
List<T>.Find方法的返回值可能为null:当列表中找不到匹配x.ColorValue == accCol的元素时,该方法会返回default(T),对于引用类型AccentColors来说,default(T)就是null。- 你声明的
res是非可空的AccentColors类型,直接将可能为null的Find结果赋值给它,就会触发Roslyn的空值校验警告,提示你“将可能的null值转换为非可空类型”。
你做的aColors.accentColorsList.Count()>0校验只能证明列表不为空,但无法保证列表中一定存在符合条件的元素,所以Roslyn依然会判定Find的返回值存在null风险。
解决思路(可选)
- 将
res声明为可空类型:AccentColors? res = aColors.accentColorsList.Find(x => x.ColorValue == accCol); - 若业务逻辑能确保一定找到匹配元素,可使用空值抑制运算符
!(需确保逻辑严谨,不推荐随意使用):AccentColors res = aColors.accentColorsList.Find(x => x.ColorValue == accCol)!;
内容的提问来源于stack exchange,提问作者Sascha Heimann
相关产品推荐
相关产品推荐

