2013-04-12 136 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接口)

其中一个缺点是:它不会执行任何处理。你可能希望将结果具体化为列表或其他内容,以便随时处理所有事情。

相关问题