我有一个代码来获取用vb.net写的hdd id
现在我需要将代码重新编写成c#。我已将vb.net代码转换为c#,但它没有编译。
以下是vb.net代码
Dim hdCollection As ArrayList = New ArrayList()
Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
For Each wmi_HD As ManagementObject In searcher.Get()
Dim hd As HardDrive = New HardDrive()
hd.Model = wmi_HD("Model").ToString()
hd.Type = wmi_HD("InterfaceType").ToString()
hdCollection.Add(hd)
Next wmi_HD
这里是转换后的C#代码:
ArrayList hdCollection = new ArrayList();
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject wmi_HD in searcher.Get())
{
HardDrive hd = new HardDrive();
hd.Model = wmi_HD("Model").ToString();
hd.Type = wmi_HD("InterfaceType").ToString();
hdCollection.Add(hd);
}
以下是我在编译c#代码时遇到的错误:
'wmi_HD'是'变量',但用作'方法'
请帮忙!
答案 0 :(得分:4)
VB代码执行下标(索引)访问。在C#中,这会转换为对this[]
属性的调用。因此呼叫需要C#中的方括号:
hd.Model = wmi_HD["Model"].ToString();
hd.Type = wmi_HD["InterfaceType"].ToString();
除此之外,两个代码都有一个问题:不要使用ArrayList
,类型已经过时了。实际上,System.Collections
命名空间中的(大多数)其他类型也是如此。这些类型已被System.Collections.Generic
命名空间中的泛型类所取代。
在您的情况下,您需要List<string>
而不是ArrayList
(或者,在VB中,List(Of String)
)。
答案 1 :(得分:1)
您尚未正确转换wmi_HD索引器。
更改这些行:
hd.Model = wmi_HD("Model").ToString();
hd.Type = wmi_HD("InterfaceType").ToString();
要:
hd.Model = wmi_HD["Model"].ToString();
hd.Type = wmi_HD["InterfaceType"].ToString();
答案 2 :(得分:1)
尝试:
hd.Model = wmi_HD["Model"].ToString();
hd.Type = wmi_HD["InterfaceType"].ToString();
方括号,不是圆形。
答案 3 :(得分:1)
尝试
hd.Model = wmi_HD["Model"].ToString();
hd.Type = wmi_HD["InterfaceType"].ToString();