74

避けたいこと:

ManagementClass m = new ManagementClass("Win32_LogicalDisk");

ManagementObjectCollection managementObjects = m.GetInstances();

List<ManagementObject> managementList = new List<ManagementObject>();

foreach(ManagementObject m in managementObjects){

    managementList.Add(m);

}

そのコレクションを次のようなリストに入れる方法はありませんか:

List<ManagementObject> managementList = new List<ManagementObjec>(collection_array);
4

7 に答える 7

133

フレームワークのバージョンは?3.5 では、おそらく以下を使用できます。

List<ManagementObject> managementList = managementObjects.Cast<ManagementObject>().ToList();

(より単純なバージョンを削除するように編集されました。ManagementObjectCollection非ジェネリックIEnumerable形式のみを確認して実装しています)

于 2008-10-09T15:53:42.487 に答える
41

あなたが使用することができます

using System.Linq;

これにより、 ICollection<> の ToList<> 拡張メソッドが提供されます

于 2015-08-02T01:32:40.717 に答える
4

managementObjects.Cast<ManagementBaseObject>().ToList();良い選択です。

リストの容量を事前に初期化することで、パフォーマンスを向上させることができます。


    public static class Helpers
    {
        public static List<T> CollectionToList<T>(this System.Collections.ICollection other)
        {
            var output = new List<T>(other.Count);

            output.AddRange(other.Cast<T>());

            return output;
        }
    }
于 2008-10-09T16:05:00.357 に答える
2

3.5 以降、System.Collection.IEnumerable から継承されたものはすべて、便利な拡張メソッド OfType を使用できます。

コレクションが ICollection または IEnumerable からのものである場合は、次のようにするだけです。

List<ManagementObject> managementList = ManagementObjectCollection.OfType<ManagementObject>().ToList();

これ以上簡単な方法はありません。: )

于 2012-09-20T17:41:34.330 に答える
1

あなたは試すことができます:

List<ManagementObject> managementList = new List<ManagementObject>(managementObjects.ToArray());

コレクションで .ToArray() を使用できるかどうかはわかりません。投稿したコードを使用する場合は、リストを既存の要素の数で初期化してください。

List<ManagementObject> managementList = new List<ManagementObject>(managementObjects.Count);  // or .Length
于 2008-10-09T15:53:28.603 に答える
0

ManagementObjectCollection が IEnumerable<ManagementObject> を実装している限り、次のことができます。

List<ManagementObject> managementList = new List<ManagementObjec>(managementObjects);

そうでない場合は、今のやり方に固執しています。

于 2008-10-09T16:02:41.330 に答える
-2

以下のコードスニペットのように変換できます

Collection<A> obj=new Collection<return ListRetunAPI()>
于 2009-03-16T06:25:56.213 に答える