Shallow copie d'une liste avec coulée en descente
Question
J'ai la herichary de classe comme suit
CEntity ----> Nœuds-C ---> CElement
J'ai
class Nodes : List<Cnode>
et
Class Elements : List<Element>
classe Node contient commune de point commun à différents projets classe Element a spécifique de l'élément à un projet.
I ai à peu profond copier la liste d'éléments dans la liste de noeuds (essentiellement vers le bas de coulée des éléments de noeuds)
La solution
Supposons que vous utilisez .net 3.0 ou plus, le code suivant crée une nouvelle liste avec les mêmes éléments downcasted à RCEOM:
List<CNode> shallowCopyNodesList = elements.Cast<CNode>().ToList();
Alors (si pas déjà), vous devez créer un constructeur de prendre une List<CNode>
en classe et faire des nœuds:
var shallowCopyNodes = new Nodes(shallowCopyNodesList);
Autres conseils
Vous pouvez simplement faire ceci:
List<CNode> nodes = new List<CNode>();
foreach (CElement element in elements) {
nodes.Add(element);
}
Lorsque des éléments est une liste.
Vous n'avez pas à vous soucier de la coulée de retour à Nœuds-C, parce que hérite de CElement de cela. La chose importante à noter est que les éléments dans la liste des noeuds (dans l'exemple ci-dessus), sont en cas de fait de CElement. Si vous vouliez vous auriez Nœuds-C probablement créer une nouvelle instance de l'aide d'un constructeur Nœuds-C de copie:
public CNode(CNode instance)
{
this.Property = instance.Property;
}
Et ajouter une nouvelle instance de Nœuds-C:
nodes.Add(new CNode(element));
Vous pouvez utiliser l'opérateur Cast dans LINQ.
var nodelist = elementList.Cast<CNode>()
.ToList();
Ce que je l'ai fait est
nodes.addrange(ElementList.ConvertAll(new Converter<Elements, CNode>(ConvertElementsToNode))));
et
public static CNode ConvertElementsToNode(Element ele)
{
return ((CNode) ele);
} // ConvertElementsToNode
mais il y aura une question de performance / mémoire dans cette approche.