如何将数组复制到扩展数组?

时间:2013-06-16 06:42:53

标签: c# arrays copy .net

我已经用这种方式定义了我的扩展类:

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

但是在将AttributeMetadata[]类型的源数组复制到我的新目标数组ExtendedAttributeMetadata[]时,我得到了InvalidCastException

  

“源数组中至少有一个元素无法转换为目标数组类型。”

代码:

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

增加:

AttributeMetadata派生自MetadataBase

public class AttributeMetadata : MetadataBase

MetadataBase是一个抽象类。

public abstract class MetadataBase : IExtensibleDataObject

请在我的案例中建议最佳和最佳的复制方式。

2 个答案:

答案 0 :(得分:1)

您无法将基类复制到派生类,因此您必须生成它:

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

答案 1 :(得分:0)

属性列表是AttributeMetadata抽象基类吗?

您收到该错误,因为列表中的属性不属于ExtendedAttributeMetadata

类型

您可以使用linq语句过滤掉这些内容:

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