2011-12-20 114 views
4

請看下面的代碼片段。我在「this.directories.Add(new directory(s));」中得到nullreferenceexception。遞歸似乎一直工作到「解開」爲止,此時「新目錄」似乎是空的。我不確定它爲什麼這樣做,我想也許有特殊的規則,因爲遞歸是在構造函數中。請幫忙。構造函數遞歸

namespace AnalyzeDir 
{ 
    class directory 
    { 
     public string[] files; 
     public ArrayList directories; 
     public string mypath; 
     public string myname; 

     public directory(string mp) 
     { 
      mypath = mp; 
      myname = mypath.Substring(mypath.LastIndexOf("\\")); 
      files = Directory.GetFiles(mypath); 
      fillDirectoriesRescursive(); 
     } 
     public void fillDirectoriesRescursive() 
     { 
      string[] dirpaths = Directory.GetDirectories(mypath); 

      if (dirpaths != null && (dirpaths.Length > 0)) 
      { 
       foreach(string s in dirpaths) 
       { 
         this.directories.Add(new directory(s)); 
       } 
      } 
     } 
+1

這與問題無關,但供將來參考:通常使用大寫,即'Directory'和'FillDirectoriesRecursive'開始.NET類和方法名稱。 – 2011-12-20 00:15:04

回答

7

您還沒有將directories初始化爲任何東西。

我建議不要在構造函數中這樣做,而是將它移動到方法調用。它回溯到「隱含行爲」,在這裏你不應該在屬性訪問器內部有大的複雜的外部系統邏輯。

您還在使用非常古老的構造,ArrayList。我建議使用ICollection<directory>代替。更多類型安全和所有。

+0

非常感謝大家!特別是對於djacobson和insta來修正文體問題。我是新來的,但我已經感受到了愛! – dmil 2011-12-20 07:47:43

1

根本沒有初始化directories