2012-03-12 10 views
0

このプログラムは、WMIデータをクラスのセット(コンピュータ内の各ハードウェア要素の1つのクラス)に編成し、特定のハードウェア要素が複数存在する場合、各クラスを複数回初期化します。これを関数に短縮

このコードセクションをいくつかの関数呼び出しに変えることができますか?私はCreateComponent(ref object dataClass, params string[] WMIClasses);の行に沿って、WMIデータの一時ストアを使用してforループで各インスタンスを追加するのではなく、コンピュータコンポーネントを初期化することを考えていました。

 // These temporary stores fetch WMI data as ManagementObjects 
     // Most cases will only need one WMI class. 
     ManagementObject[] WMIDataTemp1; 
     ManagementObject[] WMIDataTemp2; 

     // Fetch data as ManagementObjects 
     WMIDataTemp1 = DataRetriever.GetWMIData("Win32_Processor"); 
     // Loop though each ManagementObject and add a new device for each instance 
     foreach (ManagementObject Object in WMIDataTemp1) 
     { 
      this.Processors.Add(new Processor(Object)); 
     } 

     WMIDataTemp1 = DataRetriever.GetWMIData("Win32_Baseboard"); 
     WMIDataTemp2 = DataRetriever.GetWMIData("Win32_MotherboardDevice"); 
     for (int i = 0; i < WMIDataTemp1.Length; i++) 
     { 
      this.Motherboards.Add(new Motherboard(WMIDataTemp1[i], WMIDataTemp2[i])); 
     } 
     // And so on for all the other bits of hardware... 
+2

これは、codereview.stackexchange.comにもっと適しているかもしれません。 – ramblinjan

+0

これはわかりませんでした。誰かが最初に答えを出すかどうかがわかります。 – CJxD

答えて

0

LINQを試しましたか?

Processors = DataRetriever.GetWMIData("Win32_Processor").Select(x => new Processor(x)).ToList(); 
+0

ハードウェアクラスによっては、複数のWMIクラスを初期化する必要があるため、うまくいきません。 – CJxD

+0

さらに、私のターゲットフレームワークは2.0で、LINQを組み込んだとは思えません。 – CJxD