为什么我不能在我的 4D 列表中引用一个随机索引,而我知道它存在?

Why cant I refer to a random index in my 4D list, while I know it exists?

我有一个 4D 列表,我想要只显示 [k][3][j][z] 的位置,但这不起作用。我检查了所有计数,它们都是 5+,所以 3[4] 应该有效...

for (int k = 0; k < lijst4D.Count; k++)
{
    for (int i = 0; i < lijst4D[k].Count; i++) // This count is higher than 4!
    {
        for (int j = 0; j < lijst4D[k][i].Count; j++)
        {
            for (int z = 0; z < lijst4D[k][i][j].Count; z++)
            {
                Console.WriteLine(lijst4D[k][i][j][z]); // This is working
                Console.WriteLine(lijst4D[k][3][j][z]); // This is NOT working
            }
        }
    }
}

这也不起作用:

Console.WriteLine(lijst4D[0][0][0][0]);
Console.WriteLine(lijst4D[1][1][1][1]);

为什么这不起作用?谁能给我解释一下?我错过了什么吗?

我收到此错误:Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

编辑:这确实有效..为什么?

for (int k = 0; k < lijst4D.Count; k++)
{
    for (int i = 3; i < 4; i++) // Will do this loop once
    {
        for (int j = 0; j < lijst4D[k][i].Count; j++)
        {
            for (int z = 0; z < lijst4D[k][i][j].Count; z++)
            {
                Console.WriteLine(lijst4D[k][i][j][z]); 
            }
        }
    }
}

EDIT2:我如何填写列表:

for (int g = 0; g < List.Count; g++)
{
    List<List<List<string>>> Lijst3D = new List<List<List<string>>>();
    for (int j = 0; j < Alist.Count; j++)
    {
        List<List<string>> Lijst2D = new List<List<string>>();
        for (int k = 0; k < Anotherlist.Count; k++)
        {
            List<string> Lijst1D = new List<string>();
            Lijst2D.Add(Lijst1D);
        }
        Lijst3D.Add(Lijst2D);
    }
    Lijst4D.Add(Lijst3D);
}

提前致谢

您使用的是 4 维 (A[a,b,c,d]) 数组还是 4D 锯齿状数组(每个元素指向另一个数组的数组等等)? 似乎您想使用 4D 数组(像 A[i,j] 一样访问它)但是您的代码正在访问锯齿状数组(像 A[i][j])

编辑: 我会把列表分解成一个合适的数据结构,我可以正确地可视化它……可能是这样的…… 您可以在每个 class 中添加一个方法来依次填充其列表容器...

void Main()
{
    var lstOuter= new List<A>();
}

// Define other methods and classes here
class A
{
    public A ()
    {
        ListB=new List<string>();
    }
    public string val{get; set;}
    public List<string> ListB { get; set; }
}

class B
{
    public B ()
    {
        ListC=new List<string>();
    }
    public string val{get; set;}
    public List<string> ListC { get; set; }
}


class C
{
    public C ()
    {
        ListD=new List<string>();
    }
    public string val{get; set;}
    public List<string> ListD { get; set; }

}

根据您填写 4D 列表的代码:

List<string> Lijst1D = new List<string>();
Lijst2D.Add(Lijst1D);

此处您正在创建新的 List<string> 并将其添加到父二维列表。

但是 Lijst1D 本身不包含任何元素(您没有向其中添加任何内容),因此 Lijst4D[0] 将抛出 IndexOutOfRangeException 以及 Lijst4D[0][0][0][0] 抛出。