-4

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


}
4

1 回答 1

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

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

于 2013-04-12T10:48:05.013 回答