C#在对象内合并字典
Posted
技术标签:
【中文标题】C#在对象内合并字典【英文标题】:C# Merging dictionaries inside of an object 【发布时间】:2021-11-28 12:15:04 【问题描述】:我知道有很多关于这个主题的帖子,但我仍然没有找到我想要阅读的答案。
我得到两个对象 A 和 B,它们都有一个字典和一组布尔值。字典的形状相同,只是数据不同。我的最终目标是创建第三个对象 C,A 的副本,其字典根据一组规则更新为具有来自 A 和 B 的值(例如,如果 A,C.dictionary 将具有所有 A.dictionary.[x] .Dictionary.[x].Value.days 5)。 如果您对此有一个很棒的解决方案,否则,这就是我所处的位置和失败的位置:
我正在尝试创建一个新字典并循环遍历 A 和 B 以添加值...我将在之后添加规则。一旦我有了它,我会找到一种方法将这个字典放入对象 C 中。(告诉我是否过度设计,我对 C# 很陌生)。
var dict = new Dictionary<DateTime, TypeData>();
foreach (var item in A.dictionary.keys)
dict.Add(A.Dictionary[item]);
这不起作用有两个原因:
item 确实代表 A.dictionary[x].key 而不是 A.dictionary[x](还包含 value 和非公共成员) “添加”带有下划线并且不显示错误的更多信息非常感谢您查看我的帖子!
【问题讨论】:
您的 Add 错误,因为它缺少密钥。你需要做:dict.Add(item, A.Dictionary[item])。您可能需要一些键检查并将 var 项重命名为键以提高可读性 检查 documentation 的 Add 方法。 毫无疑问,Visual Studio 会告诉您在划线时会遇到什么问题。只需将鼠标悬停在它上面,它就会告诉您您的 add 调用不适合该方法的已知签名。它会向您显示有效的签名,并且它需要 2 个参数。 非常感谢,我可以通过循环遍历 keyvaluepair 并添加 kvp.key 和 kvp.Value 来做到这一点。 【参考方案1】:试试这个
var dictionariesToCombine = new Dictionary<DateTime, TypeData>[] dictA,dictB;
Dictionary<int, int> dictC = new Dictionary<DateTime, TypeData>();
for (var i=0; i< dictionariesToCombine.Length; i++)
foreach (var item in dictionariesToCombine[i])
if(
(i==0 and your conditions)
|| (i==1 and your conditions)
)
resultDict.Add(item.Key, item.Value);
【讨论】:
非常感谢 Serge,这行得通! @V1ct0r6l0r1eux 不客气!如果有帮助,请不要忘记接受答案。您可以通过单击我的答案旁边的复选标记来完成。以上是关于C#在对象内合并字典的主要内容,如果未能解决你的问题,请参考以下文章