development

IList 변수에 항목 범위를 추가하는 방법

big-blog 2020. 12. 7. 20:11
반응형

IList 변수에 항목 범위를 추가하는 방법


에 대한 AddRange()방법 이 없습니다 IList<T>.

항목을 IList<T>반복하고 Add()메서드를 사용하지 않고 항목 목록을에 추가하려면 어떻게 해야합니까?


AddRangeList<T>인터페이스가 아니라 에 정의되어 있습니다.

에 대한 액세스 권한을 얻기 위해 List<T>대신 변수를 선언 IList<T>하거나 캐스트 할 List<T>수 있습니다 AddRange.

((List<myType>)myIList).AddRange(anotherList);

ListC # 소스 코드를 보면 List.AddRange ()에 간단한 루프가 해결하지 못하는 최적화가 있다고 생각합니다. 따라서 확장 메서드는 IList가 List인지 확인하고, 그렇다면 기본 AddRange ()를 사용해야합니다.

소스 코드를 살펴보면 .NET 사용자가 .ToList ()와 같은 작업을 위해 자신의 Linq 확장에서 비슷한 작업을 수행하는 것을 볼 수 있습니다 (목록 인 경우 캐스팅 ... 그렇지 않으면 생성).

public static class IListExtension
{
    public static void AddRange<T>(this IList<T> list, IEnumerable<T> items)
    {
        if (list == null) throw new ArgumentNullException("list");
        if (items == null) throw new ArgumentNullException("items");

        if (list is List<T>)
        {
            ((List<T>)list).AddRange(items);
        }
        else
        {
            foreach (var item in items)
            {
                list.Add(item);
            }
        }
    }
}

다음과 같이 할 수 있습니다.

 IList<string> oIList1 = new List<string>{"1","2","3"};
  IList<string> oIList2 = new List<string>{"4","5","6"};
  IList<string> oIList3 = oIList1.Concat(oIList2).ToList();

출처

따라서 기본적으로 AddRange ()와 유사한 기능을 얻으려면 concat 확장과 ToList ()를 사용합니다.


다음과 같은 확장 메서드를 작성할 수도 있습니다.

internal static class EnumerableHelpers
{
    public static void AddRange<T>(this IList<T> collection, IEnumerable<T> items)
    {
        foreach (var item in items)
        {
            collection.Add(item);
        }
    }
}

용법:

        IList<int> collection = new int[10]; //Or any other IList
        var items = new[] {1, 4, 5, 6, 7};
        collection.AddRange(items);

항목에 대해 여전히 반복되지만 호출 할 때마다 반복을 작성하거나 캐스팅 할 필요가 없습니다.


var var1 = output.listDepartment1
var var2 = output.listDepartment2  
var1.AddRange(var2);
var list = var1;

참고 URL : https://stackoverflow.com/questions/13158121/how-to-add-a-range-of-items-to-the-ilist-variable

반응형