2013-06-16 6 views
1

나는 나의 확장 한 클래스 이런 식으로 정의 :배열을 확장 배열에 복사하는 방법은 무엇입니까?

public class ExtendedAttributeMetadata : AttributeMetadata 
{ 
    public bool IsTwoOption { get; set; } 
} 

을하지만 내 새로운 대상 배열 ExtendedAttributeMetadata[]에 유형 AttributeMetadata[]의 소스 배열을 복사 할 때, 나는 InvalidCastException 무엇입니까 :

"적어도 하나 원본 배열의 요소를 대상 배열 유형으로 캐스트 할 수 없습니다. "

코드 :

AttributeMetadata[] attributes; 
//... 
ExtendedAttributeMetadata[] extendedAttributes = new ExtendedAttributeMetadata[attributes.Length];     
attributes.CopyTo(extendedAttributes, 0); 

ADDED : AttributeMetadata

public class AttributeMetadata : MetadataBase 

그리고 MetadataBase MetadataBase

에서 파생

는 추상 클래스입니다.

public abstract class MetadataBase : IExtensibleDataObject 

필자의 경우 최상의 복사 방법을 제안하십시오. 속성 단지 AttributeMetadata 추상 기본 클래스의 목록이

var extendedAttributes = 
    attributes.Select(p=>new ExtendedAttribute{IsTwoOption=true/false}).ToArray(); 
+0

원래의 배열에서 왔는가? 원래 배열의 요소 중 적어도 하나가'ExtendedAttribute' 유형이 아니라는 것은 꽤 분명합니다. – dlev

+0

원래 배열은 Attribute [] 타입이며 클래스를 확장했습니다. –

+1

편집 내용이 변경되지 않습니다. * ExtendedAttributeMetadata 유형이 아닌 * 객체를 'ExtendedAttributeMetadata' 유형의 배열에 복사하려고합니다. 그것은 단지 불가능합니다. – dlev

답변

1

당신은 파생 클래스에 기본 클래스를 복사 할 수 없습니다? 유형이 아닌 목록에 속성이 있기 때문에

당신은 그 오류를 얻고있다 ExtendedAttributeMetadata

당신이 LINQ 문이를 필터링 할 수 있습니다

var extendedAttributes = attributes.OfType<ExtendedAttributeMetadata>().ToArray(); 
0

인가 : 당신이 그것을 생성해야하므로

+0

질문의 ADDED 섹션에서 내 업데이트를 참조하십시오. –

+0

ExtendedAttribute를 ExtendedAttributeMetadata로 바꿀 경우 OfType <> 필터가 계속 작동해야합니다. –

관련 문제