c# - 构造函数中的递归

标签 c# recursion constructor

请看下面的代码片段。我在“this.directories.Add(新目录);”处收到 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));
                }
            }
        }

最佳答案

你还没有初始化directories成为任何人。

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

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

关于c# - 构造函数中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8569281/

相关文章:

c# - 在 C# 中回滚

java - 查找单链表的倒数第 k 个元素

java - JAXB:反序列化扩展类 A 的类 B 时出现问题

javascript - 如何通过构造函数将一个对象设置在另一个对象下

c# - 如何限制用户登录?

c# - 如何过滤作为类事件底层实现的 FieldInfo?

C# - 填充 Gridview

MySQL压平2个连接的递归表

java - 编译器不会推进单链表的递归反转

javascript - "Firebase is not a constructor"-- 需要降级Firebase,怎么办?