用条目填充后清除ObservableCollection

时间:2014-01-14 05:46:06

标签: c#

我有以下代码用驱动器(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();
        }
    }
}

}

}

2 个答案:

答案 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));

        }
    }
}

}
相关问题