developer tip

컬렉션에서 목록으로 가장 빠르게 변환

copycodes 2020. 11. 10. 08:20
반응형

컬렉션에서 목록으로 가장 빠르게 변환


피하고 싶은 것 :

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로 가져올 수있는 방법이 있습니까?

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

어떤 버전의 프레임 워크? 3.5에서는 아마도 다음을 사용할 수 있습니다.

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

(간단한 버전을 제거하기 위해 편집 됨; 나는 확인하고 ManagementObjectCollection비 제네릭 IEnumerable양식 만 구현합니다 )


당신은 사용할 수 있습니다

using System.Linq;

그러면 ICollection <>에 대한 ToList <> 확장 메서드가 제공됩니다.


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

시도해 볼 수 있습니다.

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

컬렉션에 .ToArray ()를 사용할 수 있는지 확실하지 않습니다. 게시 한 코드를 사용하는 경우 기존 요소 수로 목록을 초기화해야합니다.

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

ManagementObjectCollection이 IEnumerable <ManagementObject>를 구현하는 한 다음을 수행 할 수 있습니다.

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

If it doesn't, then you are stuck doing it the way that you are doing it.


Since 3.5, anything inherited from System.Collection.IEnumerable has the convenient extension method OfType available.

If your collection is from ICollection or IEnumerable, you can just do this:

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

Can't find any way simpler. : )


you can convert like below code snippet

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

참고URL : https://stackoverflow.com/questions/187913/fastest-convert-from-collection-to-listt

반응형