vb代码转换为c#编译错误

时间:2010-10-12 08:04:16

标签: c# vb.net

我有一个代码来获取用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'是'变量',但用作'方法'

请帮忙!

4 个答案:

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