2017-04-23 120 views
0

我得到索引超出範圍例外。我放棄它,它是專門在「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; 
       } 
      } 
+1

您已經創建了一個空的列表,並試圖訪問其內部 – DavidG

+0

我在第7行的「for」條件檢查的無效位置。 –

+0

沒有'[i]'是問題 – DavidG

回答

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); 
} 
+0

我不確定發生了什麼事。大家都在建議「s.Add(新名單());」但由於某種原因,它不起作用。另外,對於你的第二個建議,我要使用列表的方式要求按照我向你展示的方式完成。 –

+0

然後不確定@Bilal。如果您按原樣複製了上面的代碼,並且拋出了完全相同的異常,那麼我會有點不知所措。 –

+0

對不起,我認爲你最後的代碼塊是其他人的建議。我又看了一遍,貼上了密碼,瞧,問題解決了。謝謝。 –

0

您已經新增了列表>但未添加任何新列表。

這是一個非常簡潔的循環,應該有所幫助。

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

已更新能夠解決我原來的問題。

+2

其實他需要一個's.Add(新列表());'。 –

+0

對不起,這兩種方法仍然會在「s [i]」部分創建一個超出範圍的異常。 –

+0

在訪問s [i]之前,您必須添加一個新列表。並且需要爲for循環的每次迭代添加一個新列表,以確保可以訪問一個列表。 –