构造函数中的递归

本文关键字:递归 构造函数 | 更新日期: 2023-09-27 18:18:24

请看下面的代码片段。我在"this.directories"处得到一个nullreferenceexception。添加(新目录(s));。递归似乎一直在工作,直到它"unwind",此时"new directory(s)"似乎为空。我不确定为什么它是这样表现的,我想可能有特殊的规则,因为递归是在构造函数中。请帮助。

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

构造函数中的递归

您还没有将directories初始化为任何东西。

我建议不要在构造函数中这样做,而是将其移动到方法调用中。它又回到了"隐含行为",在这里你不应该在属性访问器中有大而复杂的外部系统逻辑。

你还使用了一个非常古老的结构,ArrayList。我建议使用ICollection<directory>代替。更多的类型安全,等等。

您还没有初始化directories