Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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# 索引超出范围异常:列表无法使用添加范围_C#_Collections - Fatal编程技术网

C# 索引超出范围异常:列表无法使用添加范围

C# 索引超出范围异常:列表无法使用添加范围,c#,collections,C#,Collections,我正在获取索引超出范围的异常。我对它进行了调试,特别是在s[I].AddRange部分。GetFiles方法只是Directory.GetFiles,但它可以接受多个文件结尾 static List<List<string>> directories { get { Debug.Log(folders.Length);

我正在获取索引超出范围的异常。我对它进行了调试,特别是在s[I].AddRange部分。GetFiles方法只是Directory.GetFiles,但它可以接受多个文件结尾

static List<List<string>> directories
            {
                get
                {
                    Debug.Log(folders.Length);
                    List<List<string>> s = new List<List<string>>();
                    for (int i = 0; (i < folders.Length); i++)
                    {
                        s[i].AddRange(GetFiles(folders[i], "*.png,*.jpg,*.bmp,*.tif,*.tga,*.psd").ToList());
                        s[i].AddRange(GetFiles(folders[i], "*.prefab").ToList());
                    }
                    return s;
                }
            }

您已新建列表>,但未添加任何新列表

这是一个非常精简的for循环,应该会有所帮助

List<List<String>> s = new List<List<string>>();
for (int i = 0; i < 10; ++i) {
    s.Add(new List<String>());
    s[i].AddRange(new String[] { "a", "b", "c" });
}

更新以修复我原始答案中的问题。

执行此操作时,您会得到一个空框,可以存储一盒盒的字符串,但其中还没有任何内容。试图访问元素i会导致它抛出您看到的异常

List<List<string>> s = new List<List<string>>();
在访问项目之前,需要添加项目

s.Add(new List<string>());
不过,在您的情况下,我不会麻烦添加一个空列表,然后使用索引访问它。只需这样做:

List<List<string>> s = new List<List<string>>();
for (int i = 0; (i < folders.Length); i++)
{
    var list = GetFiles(folders[i], "*.png,*.jpg,*.bmp,*.tif,*.tga,*.psd").ToList();
    list.AddRange(GetFiles(folders[i], "*.prefab").ToList());
    s.Add(list);
}

您创建了一个空列表,并试图访问itI中的无效位置。我在for条件的第7行检查了该位置。没有s[i]是问题。我明白您的意思。我该怎么解决呢?实际上他需要一个s.Addnew List;。很抱歉,这两个操作仍会在s[i]部分中创建索引超出范围异常。在访问s[i]之前,您必须添加新列表。对于for循环的每次迭代都需要添加一个新列表,以确保有一个列表可供访问;在我使用s[i]之前已联机。那么您的文件夹数组是空的还是空的?我不知道如果在循环的每次迭代中显式地添加一个新列表,为什么s[I]会抛出一个异常。看起来你的文件夹不应该为空,但我现在不知道。我不确定发生了什么。每个人都在建议美国加入新的名单;但出于某种原因,它不起作用。另外,对于你的第二个建议,我使用列表的方式要求按照我向你展示的方式进行。对不起,我假设你的最后一个代码块是其他人所建议的。我又看了一遍,贴上代码,瞧,问题解决了。非常感谢。