如何将managementobjectcollection转换为IEnumerable <ienumerable <ipropertydata>&gt;?</ienumerable <ipropertydata>

时间:2013-04-12 10:41:09

标签: c#

如何将managementobjectcollection转换为IEnumerable<IEnumerable<IPropertyData>>,其中propertydata只是名称和价值?

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


}

1 个答案:

答案 0 :(得分: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));
}

(其中PropertyDataImplIPropertyData界面的简单实现。)

这有一个缺点:它不会进行任何处置。您可能希望将结果具体化为列表或其他内容,以便您可以随时处理所有内容。