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
相关产品推荐
相关产品推荐

