我有以下类的herichary
CEntity ----> CNode ---> CElement
我有一个
class Nodes : List<Cnode>
和
Class Elements : List<Element>
Node类包含不同项目中共同的公共项 元素类具有特定于项目的项目。
我必须将元素列表浅层复制到节点列表中(基本上将元素向下转换为节点)
答案 0 :(得分:1)
假设您使用的是.net 3.0或更高版本,以下代码会创建一个新列表,其中SAME元素将下载到CNode:
List<CNode> shallowCopyNodesList = elements.Cast<CNode>().ToList();
然后(如果还没有)你应该在Nodes类中创建一个List<CNode>
的构造函数并执行:
var shallowCopyNodes = new Nodes(shallowCopyNodesList);
答案 1 :(得分:1)
你可以这样做:
List<CNode> nodes = new List<CNode>();
foreach (CElement element in elements) {
nodes.Add(element);
}
其中元素是List。
您不必担心回退到CNode,因为CElement继承了这一点。需要注意的重要一点是,节点列表中的元素(在上面的示例中)实际上是CElement的实例。如果你想要CNode,你可能需要使用复制构造函数创建一个新的CNode实例:
public CNode(CNode instance)
{
this.Property = instance.Property;
}
添加一个新的CNode实例:
nodes.Add(new CNode(element));
答案 2 :(得分:0)
您可以在LINQ中使用Cast运算符。
var nodelist = elementList.Cast<CNode>()
.ToList();
答案 3 :(得分:0)
我所做的是
nodes.addrange(ElementList.ConvertAll(new Converter<Elements, CNode>(ConvertElementsToNode))));
和
public static CNode ConvertElementsToNode(Element ele)
{
return ((CNode) ele);
} // ConvertElementsToNode
但这种方法会有任何性能/内存问题。