2

私は次のようにクラスの継承を持っています

CEntity---->CNode--->CElement

私は

class Nodes : List<Cnode>

Class Elements : List<Element>

ノード クラスには、異なるプロジェクトに共通する共通項目が含まれます。要素クラスには、プロジェクトに固有の項目があります。

要素リストをノード リストに浅いコピーする必要があります (基本的に、要素をノードにダウン キャストします)。

4

4 に答える 4

1

.net 3.0以降を使用しているとすると、次のコードは、同じ要素がCNodeにダウンキャストされた新しいリストを作成します。

List<CNode> shallowCopyNodesList =  elements.Cast<CNode>().ToList();

次に(まだ存在しない場合)List<CNode>、Nodesクラスでaを取得するコンストラクターを作成し、次のことを行う必要があります。

var shallowCopyNodes = new Nodes(shallowCopyNodesList);
于 2010-06-04T12:40:38.877 に答える
1

あなたはこれを行うことができます:

List<CNode> nodes = new List<CNode>();
foreach (CElement element in elements) {
  nodes.Add(element);
}

ここで、elementsはリストです。

CElementはCNodeから継承するため、CNodeへのキャストバックについて心配する必要はありません。注意すべき重要なことは、ノードリスト(上記の例)の要素は実際にはCElementのインスタンスであるということです。CNodeが必要な場合は、コピーコンストラクターを使用してCNodeの新しいインスタンスを作成する必要があります。

public CNode(CNode instance)
{
  this.Property = instance.Property;
}

そして、CNodeの新しいインスタンスを追加します。

nodes.Add(new CNode(element));
于 2010-06-04T12:41:46.433 に答える
0

LINQでCast演算子を使用できます。

var nodelist = elementList.Cast<CNode>()
                   .ToList();
于 2010-06-04T12:42:50.423 に答える
0

私がやったことは

nodes.addrange(ElementList.ConvertAll(new Converter<Elements, CNode>(ConvertElementsToNode))));

public static CNode ConvertElementsToNode(Element ele)
    {
      return ((CNode) ele);
    } // ConvertElementsToNode

しかし、このアプローチにはパフォーマンス/メモリの問題がありますか?

于 2010-06-07T05:26:08.303 に答える