C#合并两个字典时如何处理字典为null引发的异常问题
代码修改方案
直接通过空合并运算符对可能为null的字典做兜底处理,把null值转换为空字典/空键值对序列后再执行合并逻辑,就能覆盖所有null场景,不需要写多层if判断:
// 先对两个字典做空值兜底,null替换为空字典 var safeDict1 = dictionary1 ?? new Dictionary<string, string>(); var safeDict2 = dictionary2 ?? new Dictionary<string, string>(); var demo = safeDict1 .Concat(safeDict2.Where(kvp => !safeDict1.ContainsKey(kvp.Key))) .ToList();
逻辑匹配说明
- 当
dictionary1为null、dictionary2有值:safeDict1是空字典,最终返回结果为dictionary2的全部内容 - 当
dictionary2为null、dictionary1有值:safeDict2是空字典,最终返回结果为dictionary1的全部内容 - 当两个字典都不为null:执行逻辑和原有代码完全一致,保留dictionary1所有键值对,追加dictionary2中键不重复的条目
- 当两个字典都为null:返回空列表,不会抛出空引用异常
如果偏好紧凑的单行写法,也可以直接在LINQ链中处理空值,不过可读性会稍差:
var demo = (dictionary1 ?? Enumerable.Empty<KeyValuePair<string, string>>()) .Concat((dictionary2 ?? Enumerable.Empty<KeyValuePair<string, string>>()) .Where(kvp => dictionary1?.ContainsKey(kvp.Key) != true)) .ToList();
日常开发更推荐拆分兜底变量的写法,逻辑清晰,后续调整规则时不容易出bug。
内容的提问来源于stack exchange,提问作者rachit
相关产品推荐
相关产品推荐

