在C#中初始化嵌套字典

时间:2019-08-17 10:46:09

标签: c# list dictionary visual-studio-2017 list-initialization

我需要知道如何访问和初始化一系列包含其他词典的词典。 例如,如果我有

class Conv{
    Dictionary<int, Dictionary<int, Dictionary<int, List<double>>>> valori;
}

我想使用随机数来初始化参数“ valori”,该怎么办? 我会喜欢

valori[n1].Values[n2].Values[n3]

但是在第一个“值”之后,MVS给我一个错误。也许我必须先分配内存?我学到了一些C ++,但是我还是C#的新手 还请让我知道我是否忘记了问题中的重要内容

2 个答案:

答案 0 :(得分:3)

使用它们之前,您需要为每个键创建子词典

var list = new List<double> {d};
var d1 = new Dictionary<int, List<double>> {{n3, list }};
var d2 = new Dictionary<int, Dictionary<int, List<double>>> {{n2, d1}};
valori[n1] = d2;

您也可以将这一行写成一行:

valori[n1] = new Dictionary<int, Dictionary<int, List<double>>> {{n2, new Dictionary<int, List<double>> {{n3, new List<double> {d}}}}};

实际上创建了所有字典后,您可以正常访问它们:

 var savedList = valori[n1][n2][n3];

由于此语法非常笨拙,而且容易出错(如果存在子词典,则忽略数据等),因此我强烈建议更改数据结构或至少将其隐藏在专用类中< / p>

答案 1 :(得分:1)

也许我弄错了,但我想不出你需要这种结构的情况,不过这是我的帮助:

首先,您需要分配变量,否则您将得到错误: “使用未分配的局部变量”。因此代码如下:

Dictionary<int, Dictionary<int, Dictionary<int, List<double>>>> valori=new 
Dictionary<int, Dictionary<int, Dictionary<int, List<double>>>>();

其次,您需要向字典中添加一些数据以便以后使用。 你应该做:

valori.Add(2, new Dictionary<int, Dictionary<int, List<double>>>());
valori.Add(3, new Dictionary<int, Dictionary<int, List<double>>>());
valori.Add(4, new Dictionary<int, Dictionary<int, List<double>>>());

“注意按键不同”

您应该代替new Dictionary<int, Dictionary<int, List<double>>>() 输入该类型的值。