我的班级遗产如下
CEntity---->CNode--->CElement
我有一个
class Nodes : List<Cnode>
和
Class Elements : List<Element>
节点类包含跨不同项目的通用项目元素类具有特定于项目的项目。
我必须将元素列表浅复制到节点列表中(基本上将元素向下转换为节点)
假设您使用的是 .net 3.0 或更高版本,以下代码将创建一个 NEW 列表,其中 SAME 元素向下转换为 CNodes:
List<CNode> shallowCopyNodesList = elements.Cast<CNode>().ToList();
然后(如果还没有)你应该创建一个构造函数,List<CNode>
在 Nodes 类中使用一个并执行:
var shallowCopyNodes = new Nodes(shallowCopyNodesList);
你可以这样做:
List<CNode> nodes = new List<CNode>();
foreach (CElement element in elements) {
nodes.Add(element);
}
其中元素是一个列表。
您无需担心转换回 CNode,因为 CElement 继承自 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
但是这种方法会出现任何性能/内存问题。