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

C# 合并对象内置Dictionary并按规则生成新对象及代码报错求助

现有代码报错原因

  • Dictionary<TKey,TValue>的Add方法需要同时传入键和值两个参数,你仅传入了值,不符合方法签名要求,因此触发语法错误。
  • A.Dictionary.Keys返回的是字典所有键的集合,遍历得到的元素自然是键类型,如果你需要同时拿到键和值,可以直接遍历A.Dictionary本身,返回的元素是KeyValuePair<DateTime, TypeData>类型,包含完整的键值信息。

合并逻辑实现

你的实现思路完全合理,没有过度设计,逻辑清晰易于调试,非常适合新手使用。完整实现代码如下:

// 1. 创建C作为A的副本,此处用浅拷贝实现,如果你自定义的类包含其他引用类型属性,需要自行实现深拷贝逻辑
var C = (你的自定义类名)A.MemberwiseClone();
var mergedDict = new Dictionary<DateTime, TypeData>();

// 2. 遍历A的所有键,按照规则合并值
foreach (var key in A.Dictionary.Keys)
{
    var aEntry = A.Dictionary[key];
    if (aEntry.days < 5)
    {
        mergedDict.Add(key, aEntry);
    }
    else
    {
        // 此处默认days >=5时取B的对应值,如果你需要days=5时走其他逻辑,自行调整判断条件即可
        mergedDict.Add(key, B.Dictionary[key]);
    }
}

// 3. 把合并完成的字典赋值给C
C.Dictionary = mergedDict;

补充说明

  • 如果你无法保证A和B的Dictionary键100%一致,可以在取B的值前添加B.Dictionary.ContainsKey(key)判断,避免触发键不存在的异常。
  • 如果你习惯使用LINQ,可以用更简洁的写法实现合并,效果和循环完全一致:
C.Dictionary = A.Dictionary.ToDictionary(
    kvp => kvp.Key,
    kvp => kvp.Value.days < 5 ? kvp.Value : B.Dictionary[kvp.Key]
);

内容的提问来源于stack exchange,提问作者V1ct0r 6l0r1eux

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:54:03