-4

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


}
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。)

これの 1 つの欠点は、破棄を実行しないことです。結果をリストなどに具体化して、すべてを破棄できるようにすることもできます。

于 2013-04-12T10:48:05.013 に答える