2013-04-12 167 views
-4

如何將managementobject收集轉換爲IEnumerable<IEnumerable<IPropertyData>>其中propertydata僅爲名稱和值?如何將managementobject集合轉換爲IEnumerable <IEnumerable <IPropertyData >>?

interface IPropertyData 
{ 

    string Name { get; } 
    object Value { get; } 
} 

class ManagementObjectInfo : IManagementInfo 
{ 


    public IEnumerable<IEnumerable<IPropertyData>> Get(string query) 
    { 
     ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 

     return searcher.Get() ; 
    } 


} 

回答

3

你將不能夠只投了參考,但你可以很容易使用LINQ:

public IEnumerable<IEnumerable<IPropertyData>> Get(string query) 
{ 
    var searcher = new ManagementObjectSearcher(query); 
    var results = searcher.Get(); 
    return results.Cast<ManagementBaseObject>() 
     .Select(item => item.Cast<PropertyData>() 
          .Select(x => (IPropertyData) 
             new PropertyDataImpl(x.Name, x.Value)); 
} 

(其中PropertyDataImpl是一個簡單的實現你的IPropertyData接口)

其中一個缺點是:它不會執行任何處理。你可能希望將結果具體化爲列表或其他內容,以便隨時處理所有事情。

相關問題