C# 为什么可以';我看不到即时窗口中的值吗?

C# 为什么可以';我看不到即时窗口中的值吗?,c#,directory,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\

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

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.\u dirs[0]。\u dirs[0]

我犯了一个错误

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


谢谢

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

如果闯入
ProcessDirectory
方法中的调试器,可以使用
this.\u dirs
查看数据结构


除此之外,
ArrayList
并不是一个集合的最佳选择,您事先就知道它只包含
string
s,就像这里的集合一样。将它们定义为
System.Collections.Generic.List

更合适_目录和文件是arraylist。。因此,您可能希望横切该列表并获取所有值。一个for、一个枚举器、一个linq或任何你喜欢的方法都可以做到这一点

更新:


在读了你的文章之后,我认为有一个基本理解的问题。仅向类中添加名称,不会为您提供文件位置或文件夹。您必须寻找更好的方法来使用它(可能是一个类文件夹/文件,也可以保存文件夹?)。

\u dirs是一个存储对象的ArrayList,因此您需要将对象从第一个目录[0]强制转换为MySubDir

e、 g

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

List<MySubDir>
列表

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

当您遇到错误时,a)尝试仔细阅读它-它可能包含问题的线索,b)如果您要在问题中提及它,请包括实际的错误信息-即使您无法从中收集任何有用的信息,也许你的潜在回答者可以?此外:如果你要在即时窗口中提到访问内容,也要指出你停止执行的位置(例如,在源代码中添加注释,说

List<MySubDir>