Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我不能引用4D列表中的随机索引,而我知道它存在?_C#_List_For Loop_Dimensions - Fatal编程技术网

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

C# 为什么我不能引用4D列表中的随机索引,而我知道它存在?,c#,list,for-loop,dimensions,C#,List,For Loop,Dimensions,我得到了一个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].Cou

我得到了一个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
            }
        }
    }
}
为什么这不起作用?谁能给我解释一下吗?我错过什么了吗

我得到这个错误:
索引超出范围。必须为非负数且小于集合的大小。
参数名称:索引

编辑:这是有效的。。为什么?

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]); 
            }
        }
    }
}
for(int k=0;k
编辑2:我如何填写我的列表:

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);
}
for(int g=0;g

提前感谢

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

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

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; }

}
void Main()
{
var lstouther=新列表();
}
//在此处定义其他方法和类
甲级
{
公共A()
{
ListB=新列表();
}
公共字符串val{get;set;}
公共列表列表b{get;set;}
}
B类
{
公共B()
{
ListC=新列表();
}
公共字符串val{get;set;}
公共列表ListC{get;set;}
}
C类
{
公共C()
{
ListD=新列表();
}
公共字符串val{get;set;}
公共列表列表d{get;set;}
}

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

List<string> Lijst1D = new List<string>();
Lijst2D.Add(Lijst1D);
List Lijst1D=new List();
Lijst2D.Add(Lijst1D);
在这里,您将创建新的
列表
,并将其添加到父二维列表中


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

看起来与您几天前发布的问题非常类似。坦率地说,“工作与否”严格取决于如何填充数组。很难不看就说更多。一秒钟后,我将添加代码,我将向您展示如何填写我的4dList。我添加了代码,我将列表添加到列表中etc@AndyKorneyev我确实将我的数组填充添加到了questoinI列表中,我正在处理一个列表,但实际上我不知道,让我添加代码,我添加如何填写我的列表我添加代码,我将列表添加到列表中,等等。。如果我将A[i,j]设为真,它会告诉我代码必须采用4argumentsTrue,我这样将其添加到我的代码中:Lijst4D[x][y][z];但是这不是很奇怪吗:
for(inti=3;i<4;i++)
但是这并不奇怪:
Console.WriteLine(lijst4D[k][3][j][z])?或者这完全可以理解吗?:)@这里没什么奇怪的
Lijst4D[k][i][j]。Count
为零(因为您没有向
List1D
添加任何内容),所以您在“this is working”示例
中为(int z=0;z
提供的大多数内部循环根本不执行-这就是您没有得到异常的原因。Andy,谢谢你回答我的问题。很好的一天
List<string> Lijst1D = new List<string>();
Lijst2D.Add(Lijst1D);