为什么我不能在即时窗口看到价值?

时间:2012-03-19 17:27:03

标签: c# directory

我有一段代码,它将遍历目录位置并从中创建数据模型。例如,如果我有一个目录结构:

c:\TestDir1

c:\TestDir1\Sub1\
c:\TestDir1\Sub1\File1.txt
c:\TestDir1\Sub1\File2.txt

c:\TestDir1\Sub1\SubSub1
c:\TestDir1\Sub1\SubSub1\File3.xlsx

c:\TestDir1\Sub1\SubSub1\SubDirX
c:\TestDir1\Sub1\SubSub1\SubDirX\File4.txt
c:\TestDir1\Sub1\SubSub1\SubDirX\File5.txt
c:\TestDir1\Sub1\SubSub1\SubDirX\File6.txt

它将通过以下代码创建适当的数据模型:

static void BeginIt()
{
    DirectoryInfo diTop = new DirectoryInfo(@"c:\Misc\3) Projects\002) Document Manager\DirectoryReading\TestDir1");
    string path = diTop.FullName;
    MySubDir mySubDir = new MySubDir(path);
}

public class MySubDir
{
    public ArrayList _dirs;
    public ArrayList _files;

    public MySubDir(string dirPath)
    {
        _dirs = new ArrayList();
        _files = new ArrayList();
        this.ProcessDirectory(dirPath);
    }

    private void ProcessDirectory(string dirPath)
    {
        // Process the list of files found in the directory.
        string[] fileEntries = Directory.GetFiles(dirPath);
        foreach (string fileName in fileEntries)
        {
            _files.Add(fileName);
        }

        // Recurse into subdirectories of this directory.
        string[] subdirectoryEntries = Directory.GetDirectories(dirPath);

        foreach (string subdirectory in subdirectoryEntries)
        {
            _dirs.Add(new MySubDir(subdirectory));
        }
    }
}

这是我的问题。当我逐行遍历代码时,它正在适当地构建数据模型。当我执行AddWatch时,我可以看到对象和目录结构已正确构建。

当我尝试通过立即窗口访问内容的值时,我收到错误。例如,如果我在以下窗口中输入以下内容

? mySubDir._dirs [0] ._显示目录[0]

我收到错误。

如何获取这些子目录的值?我希望能够在创建它时访问该模型中元素的目录名和文件名。

由于

3 个答案:

答案 0 :(得分:1)

这看起来不会起作用,因为表达式mySubDir.whatever取决于mySubDir在范围内并具有有效值。为了实现这一点,构造函数必须首先返回 - 但是在执行构造函数期间正在填充对象。因此,在这个程序的生命周期中,这样的表达式会产生有意义的结果,这一点毫无意义。

如果您在ProcessDirectory方法内部进入调试器,则可以使用this._dirs来查看数据结构。

除此之外,ArrayList不是预先知道的集合的最佳选择,只包含string s,就像你在这里一样。将这些定义为System.Collections.Generic.List<string>更合适。

答案 1 :(得分:0)

好.. _dirs和文件是arraylist ..所以你可能希望横向该列表并获取所有值。 a for,enumerator,linq或者你喜欢的任何方法都可以做到这一点..

更新

在阅读了更多帖子之后,我认为存在基本理解的问题。仅向类中添加名称,不会为您提供文件位置或文件夹。您将不得不寻找更好的方式来使用它(也许是一个类文件夹/文件也可以容纳文件夹?)..

答案 2 :(得分:0)

_dirs是一个存储对象的ArrayList,因此您需要将对象从第一个_dir [0]转换为MySubDir

e.g。

((MySubDir)mySubDir._dir[0])._dir[0]

或者将集合类型从ArrayList更改为

List<MySubDir>

当使用索引器访问时,这将为您提供强类型列表项。