2

我的班级遗产如下

CEntity---->CNode--->CElement

我有一个

class Nodes : List<Cnode>

Class Elements : List<Element>

节点类包含跨不同项目的通用项目元素类具有特定于项目的项目。

我必须将元素列表浅复制到节点列表中(基本上将元素向下转换为节点)

4

4 回答 4

1

假设您使用的是 .net 3.0 或更高版本,以下代码将创建一个 NEW 列表,其中 SAME 元素向下转换为 CNodes:

List<CNode> shallowCopyNodesList =  elements.Cast<CNode>().ToList();

然后(如果还没有)你应该创建一个构造函数,List<CNode>在 Nodes 类中使用一个并执行:

var shallowCopyNodes = new Nodes(shallowCopyNodesList);
于 2010-06-04T12:40:38.877 回答
1

你可以这样做:

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));
于 2010-06-04T12:41:46.433 回答
0

您可以在 LINQ 中使用 Cast 运算符。

var nodelist = elementList.Cast<CNode>()
                   .ToList();
于 2010-06-04T12:42:50.423 回答
0

我所做的是

nodes.addrange(ElementList.ConvertAll(new Converter<Elements, CNode>(ConvertElementsToNode))));

public static CNode ConvertElementsToNode(Element ele)
    {
      return ((CNode) ele);
    } // ConvertElementsToNode

但是这种方法会出现任何性能/内存问题。

于 2010-06-07T05:26:08.303 回答