Вы могли бы просто сделать это:
List<CNode> nodes = new List<CNode>();
foreach (CElement element in elements) {
nodes.Add(element);
}
Где элементы - это список.
Вам не нужно беспокоиться о приведении обратно к CNode, потому что CElement наследует от этого. Важно отметить, что элементы в списке узлов (в приведенном выше примере) фактически являются экземплярами CElement. Если вам нужен CNode, вам, вероятно, придется создать новый экземпляр CNode с помощью конструктора копирования:
public CNode(CNode instance)
{
this.Property = instance.Property;
}
И добавьте новый экземпляр CNode:
nodes.Add(new CNode(element));