오늘 동료가 컬렉션에 범위를 추가하는 방법을 물었습니다. 그는에서 상속하는 클래스가 있습니다 Collection<T>
. 이미 일부 항목을 포함하는 해당 유형의 가져 오기 전용 속성이 있습니다. 그는 다른 컬렉션의 항목을 속성 컬렉션에 추가하려고합니다. C # 3 친화적 인 방식으로 어떻게 그렇게 할 수 있습니까? (Union 수행 및 재 할당과 같은 솔루션을 방지하는 get-only 속성에 대한 제약에 유의하십시오.)
물론입니다. Property가있는 foreach입니다. 추가가 작동합니다. 그러나 List<T>
스타일 AddRange는 훨씬 더 우아합니다.
확장 메서드를 작성하는 것은 쉽습니다.
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
그러나 나는 바퀴를 재발 명하고 있다는 느낌이 있습니다. System.Linq
or morelinq 에서 비슷한 것을 찾지 못했습니다 .
나쁜 디자인? 그냥 전화 추가? 명백한 것을 놓치고 있습니까?
ICollection<T>
는 Add
방법 이없는 것 같습니다 . msdn.microsoft.com/en-us/library/… 하지만 Collection<T>
하나 있습니다.
Add(T item)
애초에 있었나요? 단일 항목을 추가 할 수있는 기능을 제공 한 다음 모든 호출자가 한 번에 둘 이상의 항목을 추가하기 위해 반복 할 것으로 기대하는 절반 정도의 접근 방식처럼 보입니다. 귀하의 진술은 확실히 사실 IEnumerable<T>
이지만 저는 ICollections
한 번 이상 좌절감을 느꼈 습니다. 나는 당신과 동의하지 않습니다.