와 서브 클래스의 컬렉션을 추가 > .AddRange (목록 <B>)하지만 컴파일러는 거부 :는 AddRange
Argument '1': cannot convert from 'System.Collections.Generic.List<A>'
to 'System.Collections.Generic.IEnumerable<B>
나는 완전히 이해하는 IEnumerable을 < 때문에 B >은 IEnumerable <A>에서 상속하지 않으며 해당 제네릭 형식에는 상속이 있습니다. 목록 < > .Add (A 항목) B 항목에서 작동하기 때문에
내 솔루션 목록 <B>을 통해 열거하고 개별적으로 항목을 추가하는 것입니다
foreach(B item in listOfBItems)
{
listOfAItems.Add(item);
}
은 그러나, 오히려 비 표현 왜냐하면 내가 원하는 것은 AddRange 뿐이다.
나는
List<B>.ConvertAll<A>(delegate(B item) {return (A)item;});
를 사용할 수 있지만 불필요하게 복잡한 그리고 내가 변환 아니에요 때문에 잘못된, 내가 캐스팅하고 있습니다.
질문 : 나는 나를 <를 나열하는 유사 한 라이너로 A의 모음으로 B의 컬렉션을 복사 할 수 것이라고 여기에 추가 할 것입니다 무슨 방법 내 자신의 목록과 같은 모음을 작성한다면 A > .AddRange (목록 <B>) 및은 최대 유형 안전을 유지합니다. (그리고 최대로 나는 인수가 콜렉션과 유형 상속 검사라는 것을 의미합니다.)
- 적어도 저에게는 기대되는 행동입니다. 당신은 무엇을 기대합니까, 아니면 어떻게 이것이 문제입니까? – Lucero
정확히 내가 의심하는 바입니다. 나는 이것이 최대 타입 안전에 대한 나의 질문 요구 사항을 만족 시킨다는 것을 말하고 있었다. –
또한 컴파일러가 형식이 호환된다는 것을 컴파일러가 알고 있기 때문에 (항목을 "편집"에 추가했는지 확실하지 않음) "항목"을 "T"로 변환해서는 안됩니다. – Lucero