如何将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() ;
}
}
答案 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));
}
(其中PropertyDataImpl
是IPropertyData
界面的简单实现。)
这有一个缺点:它不会进行任何处置。您可能希望将结果具体化为列表或其他内容,以便您可以随时处理所有内容。