Рекурсия в конструкторе - PullRequest
       5

Рекурсия в конструкторе

4 голосов
/ 20 декабря 2011

Пожалуйста, посмотрите на следующий фрагмент кода. Я получаю исключение nullreference в "this.directories.Add (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));
                }
            }
        }

Ответы [ 2 ]

7 голосов
/ 20 декабря 2011

Вы не инициализировали directories как что-либо.

Я бы предложил не делать этого в конструкторе, а вместо этого переместить его в вызов метода.Это восходит к «подразумеваемому поведению», когда у вас не должно быть большой сложной внешней системной логики внутри методов доступа к свойствам.

Вы также используете очень старую конструкцию ArrayList.Я бы предложил вместо этого использовать ICollection<directory>.Больше безопасности типа и все такое.

1 голос
/ 20 декабря 2011

Вы вообще не инициализировали directories.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...