次のコードスニペットを見てください。私は "this.directories.Add(新しいディレクトリ);でnullreferenceexceptionを取得しています;"再帰は、 "unwinds"するまで動作しているように見えます。この時点で、 "new directory(s)"はnullのようです。私はなぜこのように振る舞っているのか分からないので、再帰がコンストラクタにあるので特別なルールがあるかもしれないと思った。助けてください。コンストラクタでの再帰
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));
}
}
}
これは疑問とは関係ありませんが、将来参照するためには、.NETクラスとメソッド名を大文字で始めるのが普通です。つまり、 'Directory'と' FillDirectoriesRecursive'です。 –