我希望将所有固定驱动器名称作为字符串数组来为单选按钮命名。 这是我用过的代码..
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'”
我的代码出了什么问题?我该如何解决这个问题?
答案 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++;
}
}