索引超出范围异常:列表不使用添加范围

时间:2017-04-23 00:57:55

标签: c# collections

我的索引超出了范围异常。我对它进行了调整,特别是在" 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;
                }
            }

2 个答案:

答案 0 :(得分:1)

当你这样做时,你会得到一个空盒子,可能存放一串字符串,但它还没有。尝试访问元素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);
}

答案 1 :(得分:0)

您已经新建了一个List&gt;但没有添加任何新列表。

这是一个非常简单的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" });
}

更新以解决原始答案中的问题。