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>