You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:39:38