2010-10-12 24 views
0

我有一個代碼,讓寫在vb.net硬盤IDVB代碼轉換爲C#編譯錯誤

現在,我需要重新編寫代碼到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

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))。

+0

感謝。這是我的一個愚蠢的錯誤:]並且我已經將ArrayList更改爲列表。謝謝! – 2010-10-12 10:25:53

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(); 
1

嘗試:

hd.Model = wmi_HD["Model"].ToString(); 
hd.Type = wmi_HD["InterfaceType"].ToString(); 

方括號,不是圓的。

1

嘗試

hd.Model = wmi_HD["Model"].ToString(); 
hd.Type = wmi_HD["InterfaceType"].ToString();