2011-12-20 66 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