我有以下代码用驱动器(RootDrive)和目录填充Treeview。 但是如何在每次循环后清除目录集合?现在发生的是所有驱动器中的所有目录都添加到每个驱动器中。 当我在Finally语句中使用directories.Clear()时,没有为每个驱动器添加目录。
static public ObservableCollection<GetDrive> RootDrive = new ObservableCollection<GetDrive>();
public MainWindow()
{
InitializeComponent();
ObservableCollection<GetDirectory>directories = new ObservableCollection<GetDirectory>();
foreach (DriveInfo di in DriveInfo.GetDrives())
{
try
{
foreach (string s in Directory.GetDirectories(di.Name))
{
directories.Add(new GetDirectory(s));
}
}
catch (IOException) //drive is not ready, e.g. DVD drive
{
}
finally
{
RootDrive.Add(new GetDrive(di.Name, directories));
directories.Clear();
}
}
}
}
}
答案 0 :(得分:1)
简单地说,改为使用局部变量。而你正在滥用finally指令。
static public ObservableCollection<GetDrive> RootDrive = new ObservableCollection<GetDrive>();
public MainWindow()
{
InitializeComponent();
foreach (DriveInfo di in DriveInfo.GetDrives())
{
ObservableCollection<GetDirectory>directories = new ObservableCollection<GetDirectory>();
try
{
foreach (string s in Directory.GetDirectories(di.Name))
{
directories.Add(new GetDirectory(s));
}
}
catch (IOException) //drive is not ready, e.g. DVD drive
{
// Handle it?
}
RootDrive.Add(new GetDrive(di.Name, directories));
}
}
答案 1 :(得分:0)
我认为您必须更改代码位并在第一个for循环后添加clear方法。如下......
static public ObservableCollection<GetDrive> RootDrive = new ObservableCollection<GetDrive>();
public MainWindow()
{
InitializeComponent();
foreach (DriveInfo di in DriveInfo.GetDrives())
{
try
{
directories.Clear();
foreach (string s in Directory.GetDirectories(di.Name))
{
directories.Add(new GetDirectory(s));
}
}
catch (IOException) //drive is not ready, e.g. DVD drive
{
}
finally
{
RootDrive.Add(new GetDrive(di.Name, directories));
}
}
}
}