我正在尝试制作一系列列表列表,整件事令我困惑。我希望数组更大,所以我做了List<List<int>>[] arr = new List<List<int>>[5]
,但在添加几个项目之后,我需要通过arr.ElementAt(1).ElementAt(1)[1]
访问它们,但不应该是另一种方式周围([1]
在开始时)?
我尝试做的只是填充整个三维,但当我尝试通过arr[1].ElementAt(1).Add(...)
或arr.ElementAt(1)[1].Add(...)
添加最后一个维度时(不确定要使用哪个维度,两者都没有工作)我得到一个恐怖说我试图将值添加到空列表
答案 0 :(得分:2)
您需要在使用之前实例化List<List<int>>
arr[0] = new List<List<int>>();
arr[0].Add(new List<int>());
arr[0][0].Add(5);
///etc...
另一个注意事项:您是否了解我在[]
上使用List
括号的方式?支持 。
答案 1 :(得分:0)
new List<List<int>>[5]
实际上是一个List of List of int的数组,但你仍然可以在它上面调用ElementAt(),因为数组实现了IEnumerable。
答案 2 :(得分:0)
以下显示了与所需数据结构的不同交互,以添加和验证元素。
var arr = new List<List<int>>[]
{
new List<List<int>>()
{
new List<int>() { 1, 3, 5 },
new List<int>() { 2, 4, 6 },
},
new List<List<int>>() { new List<int>() },
new List<List<int>>() { new List<int>() },
new List<List<int>>() { new List<int>() },
new List<List<int>>() { new List<int>() },
};
Assert.AreEqual(4, arr[0].ElementAt(1).ElementAt(1));
Assert.AreEqual(3, arr[0].ElementAt(1).Count);
arr[0].ElementAt(1).Add(8);
Assert.AreEqual(4, arr[0].ElementAt(1).Count);
Assert.AreEqual(8, arr[0].ElementAt(1).ElementAt(3));