Подтвердить что ты не робот

Быстрое преобразование из коллекции в список <T>

Чего я бы хотел избежать:

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);
4b9b3361

Ответ 1

Какая версия фреймворка? С 3.5 вы могли бы использовать:

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

(отредактирован для удаления более простой версии, я проверил и ManagementObjectCollection только реализует не-общую форму IEnumerable)

Ответ 2

Вы можете использовать

using System.Linq;

Это даст вам метод ToList < > extension для ICollection < >

Ответ 3

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

Ответ 4

Вы можете попробовать:

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

Не уверен, что для коллекции доступно .ToArray(). Если вы используете код, который вы отправили, убедитесь, что вы инициализируете List с количеством существующих элементов:

List<ManagementObject> managementList = new List<ManagementObject>(managementObjects.Count);  // or .Length

Ответ 5

Пока ManagementObjectCollection реализует IEnumerable <ManagementObject> вы можете сделать:

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

Если это не так, то вы застряли, делая это так, как вы это делаете.

Ответ 6

вы можете конвертировать, как показано ниже фрагмент кода

Collection<A> obj=new Collection<return ListRetunAPI()>

Ответ 7

Начиная с 3.5, все, что унаследовано от System.Collection.IEnumerable, имеет удобный способ расширения OfType.

Если ваша коллекция принадлежит ICollection или IEnumerable, вы можете просто сделать это:

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

Невозможно найти способ проще.:)