构造函数中的递归

dmi*_*mil 4 c# recursion constructor

请查看以下代码段.我在"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));
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

Bry*_*her 7

你没有初始化directories为任何东西.

我建议不要在构造函数中执行此操作,而是将其移至方法调用.它可以追溯到"隐含行为",你不应该在属性访问器内部有大的复杂的外部系统逻辑.

你也使用了一个非常古老的结构ArrayList.我建议ICollection<directory>改用.更多类型安全和所有这些.