将所有固定驱动器名称获取为字符串数组

时间:2014-01-03 15:22:18

标签: c#

我希望将所有固定驱动器名称作为字符串数组来为单选按钮命名。 这是我用过的代码..

var drvs = System.IO.DriveInfo.GetDrives();
int hdcount = 0;
string[] drivenames;
foreach (var drv in drvs)
{
    if (drv.DriveType == System.IO.DriveType.Fixed)
    {
        drivenames[hdcount] = drv.Name;
        hdcount++;
    }
}

但是这段代码不起作用。 它说“错误1使用未分配的局部变量'drivenames'”

我的代码出了什么问题?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您刚刚声明了数组string[] drivenames;,但您需要分配驱动器名称string[] drivenames = new string[fixedDriveCount];所需的空间,但这有点不实用,因为您应该知道以前固定驱动器的数量。还有更强大的对象来存储一组项目,这些项目不需要事先知道要存储在集合中的项目数量。我建议使用List<string>代替

    var drvs = System.IO.DriveInfo.GetDrives();
    List<string> drivenames = new List<string>();
    foreach (var drv in drvs)
    {
        if (drv.DriveType == System.IO.DriveType.Fixed)
        {
            drivenames.Add(drv.Name);
        }
    }
    int hdcount = drivenames.Count;

使用Linq你可以缩短所有内容

var drvs = DriveInfo.GetDrives()
           .Where(x => x.DriveType == DriveType.Fixed)
           .Select(k => k.Name).ToList();

// and then use the result to initialize a listbox (for example)
listBox1.DataSource = drvs;

答案 1 :(得分:1)

以下是如何做到Linqy

String []dArray = System.IO.DriveInfo.GetDrives()
            .Where(x => x.DriveType == DriveType.Fixed)
            .Select(d => d.Name).ToArray();

List<string> dList = System.IO.DriveInfo.GetDrives()
            .Where(x => x.DriveType == DriveType.Fixed)
            .Select(d => d.Name).ToList();

答案 2 :(得分:0)

您错过了初始化字符串数组。您可以使用驱动器数量来完成此操作。

尝试

var drvs = System.IO.DriveInfo.GetDrives();
int hdcount = 0;
string[] drivenames = new string[drvs.Count()];
foreach (var drv in drvs)
{
    if (drv.DriveType == System.IO.DriveType.Fixed)
    {
        drivenames[hdcount] = drv.Name;
        hdcount++;
    }
}