4 votes

Récursion dans le constructeur

Veuillez consulter l'extrait de code suivant. J'obtiens une exception de type nullreferenceexception à "this.directories.Add(new directory(s)) ;". La récursion semble fonctionner jusqu'à ce qu'elle se déroule, et à ce moment-là, "new directory(s)" semble être un null. Je ne sais pas trop pourquoi il se comporte ainsi, je pensais qu'il y avait peut-être des règles spéciales parce que la récursion est dans le constructeur. Merci de m'aider.

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));
                }
            }
        }

7voto

insta Points 2628

Vous n'avez pas initialisé directories d'être n'importe quoi.

Je suggère de ne pas le faire dans le constructeur, mais de le déplacer dans un appel de méthode. Cela revient au "comportement implicite", où vous ne devriez pas avoir une logique de système étranger compliquée à l'intérieur des accesseurs de propriété.

Vous utilisez également une construction très ancienne, ArrayList . Je suggère d'utiliser un ICollection<directory> au lieu de cela. Plus de sécurité de type et tout cela.

1voto

Daniel A. White Points 91889

Vous n'avez pas initialisé directories du tout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X