私は次のようにクラスの継承を持っています
CEntity---->CNode--->CElement
私は
class Nodes : List<Cnode>
と
Class Elements : List<Element>
ノード クラスには、異なるプロジェクトに共通する共通項目が含まれます。要素クラスには、プロジェクトに固有の項目があります。
要素リストをノード リストに浅いコピーする必要があります (基本的に、要素をノードにダウン キャストします)。
.net 3.0以降を使用しているとすると、次のコードは、同じ要素がCNodeにダウンキャストされた新しいリストを作成します。
List<CNode> shallowCopyNodesList = elements.Cast<CNode>().ToList();
次に(まだ存在しない場合)List<CNode>
、Nodesクラスでaを取得するコンストラクターを作成し、次のことを行う必要があります。
var shallowCopyNodes = new Nodes(shallowCopyNodesList);
あなたはこれを行うことができます:
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));
LINQでCast演算子を使用できます。
var nodelist = elementList.Cast<CNode>()
.ToList();
私がやったことは
nodes.addrange(ElementList.ConvertAll(new Converter<Elements, CNode>(ConvertElementsToNode))));
と
public static CNode ConvertElementsToNode(Element ele)
{
return ((CNode) ele);
} // ConvertElementsToNode
しかし、このアプローチにはパフォーマンス/メモリの問題がありますか?