2010-10-12 6 views
0

J'ai eu un code pour obtenir l'identifiant hdd écrit dans vb.netcode vb converti en C# erreur de compilation

Maintenant je dois réécrire le code en C#. J'ai converti le code de vb.net en C# mais il ne compile pas.

est Ci-dessous le code 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 

ici est le converti du code 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); 
       } 

Suite est l'erreur que je reçois lors de la compilation du code C#:

' wmi_HD 'est une' variable 'mais est utilisée comme une' méthode '

Aidez s'il vous plaît!

Répondre

4

Le code VB effectue un accès en indice (indexé). En C#, cela convertit en un appel à la propriété this[]. Ainsi, l'appel a besoin des crochets en C#:

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

En dehors de cela, il y a une chose mal avec les deux codes: Ne pas utiliser ArrayList, le type est obsolète. En fait, la même chose est vraie pour (la plupart des) autres types dans l'espace de noms System.Collections. Les types ont été remplacés par des classes génériques dans l'espace de noms System.Collections.Generic.

Dans votre cas, vous voulez un List<string> au lieu du ArrayList (ou, dans VB, List(Of String)).

+0

Merci. C'était une erreur stupide de ma part:] et aussi j'ai changé le ArrayList en Liste . Merci! –

1

Vous n'avez pas converti correctement les indexeurs wmi_HD.

Modifier ces lignes:

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

Essayez:

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

crochets, pas ronds.

1

Essayez

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