c# - 所有嵌套字典都具有相同的值?
问题描述
我正在尝试使用嵌套字典构建此数据结构:
["A",["A",123]],
["B",["B",123]],
["C",["C",123]],
然后遍历数据结构并打印出值。
第一个问题是,所有嵌套字典都是相同的 {"C",123}。我认为这是因为它是同一个对象,但我不知道如何克服这一点。我可以在循环中动态创建新对象吗?
我面临的另一个问题是在我尝试打印出值的循环中。编译器说它不能将 Dictionary 转换为 Dictionary。
using System;
using System.Collections.Generic;
namespace ConsoleApp1
{
class Program
{
public static void Main()
{
List<string> liste = new() { "A", "B", "C" };
Dictionary<string, Dictionary<string, int>> DictOfDicts = new();
Dictionary<string, int> DictOfData = new();
foreach (string i in liste)
{
DictOfData.Clear();
DictOfData.Add(i, 123);
DictOfDicts.Add(i, DictOfData);
}
foreach (Dictionary<string, int> i in DictOfDicts)
{
Console.WriteLine("Some result");
}
}
}
}
解决方案
您在循环DictOfData
之外声明。foreach
然后,循环内的所有操作都在同一个对象上完成。因此,您在每次循环迭代中一遍又一遍地清除和填充同一个字典对象。
只需将您的声明移动DictOfData
到循环内,您就可以开始了。
奖金:
您在问题中显示的整个操作都可以通过以下方式完成:
liste.ToDictionary(x => x, x => new Dictionary<string, int>() { { x, 123 } })
推荐阅读
- c# - 如何在 Nunit GUI 中运行 specflow 测试场景?
- vb.net - 更新不是 tableadapter 的成员
- java - 需要知道我是否可以使用 jmeter 对语音优先反应本机应用程序进行负载\性能测试
- javascript - vue拖放后拖动的项目消失
- jquery - 如何将偏移量应用于另一个页面上的#link
- xcode - 不能做 xcodebuild - 方案有一个空间
- orbeon - 使用自动完成的新组件
- scala - 如何让 Intellij 在 ammonite 脚本中解析私有 maven 存储库中的包?
- javascript - 两个按钮触发一个脚本
- laravel - 不同用户 Laravel 的身份验证(尝试获取非对象的属性)