请看下面的代码片段。我在“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/