1

拡張クラスを次のように定義しました。

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

AttributeMetadata[]しかし、タイプのソース配列を新しい宛先配列にコピーすると、次のExtendedAttributeMetadata[]ようになりInvalidCastExceptionます:

「ソース配列の少なくとも 1 つの要素を宛先配列型にキャストできませんでした。」

コード:

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

追加した:

AttributeMetadataMetadataBase から派生する場所

public class AttributeMetadata : MetadataBase

そしてMetadataBase抽象クラスです。

public abstract class MetadataBase : IExtensibleDataObject

私の場合、最善かつ最適なコピー方法を提案してください。

4

2 に答える 2

1

基本クラスを派生クラスにコピーできなかったため、生成する必要があります。

var extendedAttributes = 
   attributes.Select(p=>new ExtendedAttribute{IsTwoOption=true/false}).ToArray();
于 2013-06-16T06:59:03.033 に答える
0

属性のリストは単なるAttributeMetadata抽象基本クラスですか?

タイプではない属性がリストにあるため、そのエラーが発生していますExtendedAttributeMetadata

linq ステートメントでこれらを除外できます。

var extendedAttributes = attributes.OfType<ExtendedAttributeMetadata>().ToArray();
于 2013-06-16T07:20:00.217 に答える