如何处理字典可空int类型键?分组转Dictionary报错解决方案
解决可空int分组转字典的类型约束问题
错误原因
字典的键类型必须满足notnull约束,你当前代码中分组键的类型是int?(可空整数),不符合该约束。问题出在三元表达式x.ParentId == null ? 0 : x.ParentId:由于x.ParentId是int?,0会被隐式转换为int?,导致分组键仍为可空类型,最终触发报错。
正确解决方案
方案1:明确取出非空值,将键转为int
直接通过.Value获取非空ParentId的实际值,确保分组键类型为非可空int:
asd.Value?.GroupBy(x => x.ParentId == null ? 0 : x.ParentId.Value) .ToDictionary(gg => gg.Key, gg => gg.ToList());
方案2:使用GetValueOrDefault简化写法
利用int?的GetValueOrDefault()方法,null时返回默认值0,非null时返回对应int值,写法更简洁:
asd.Value?.GroupBy(x => x.ParentId.GetValueOrDefault()) .ToDictionary(gg => gg.Key, gg => gg.ToList());
方案3:保留null标识(不推荐)
如果需要保留null作为键的特殊标识,可以将键类型转为object(但会丢失类型安全性):
asd.Value?.GroupBy(x => (object)x.ParentId) .ToDictionary(gg => gg.Key, gg => gg.ToList());
内容的提问来源于stack exchange,提问作者Alexandr Laketych
相关产品推荐
相关产品推荐

