将Linq查询复制到List

时间:2011-09-12 18:34:14

标签: vb.net linq .net-3.5

'Read RESX file and returns a List(Of ResXDataNode)
Dim allNodes = getResourceData()

'Linq Query to extract the nodes
Dim movedNodes = From rowNodes In allNodes _
                 Where rowNodes.Comment = oldRowNumber _
                 Select rowNodes

请问:

Dim nodesToMove As List(Of ResXDataNode) = New List(Of ResXDataNode)

For Each movedNode As ResXDataNode In movedNodes
    nodesToMove.Add(movedNode)
Next

Dim nodesToMove As List(Of ResXDataNode) = movedNodes.ToList

提供两个单独的节点副本?或者List和Linq查询是否仍然引用相同的数据?

2 个答案:

答案 0 :(得分:3)

他们仍将引用相同的对象 - 不会创建任何额外的ResXDataNode个对象。

顺便说一下,调用movedNodes.ToList()会比手动添加每个更简单......

现在很有可能每次迭代movedNodes可能创建新对象 - 它实际上取决于它正在做什么,而你还没有展示它是如何被创建的。但是复制到列表不会创建新对象。

答案 1 :(得分:3)

如果ResXDataNode是引用类型,它们仍将引用相同的对象,如果它是值类型,则创建副本并将其添加到新列表中。

编辑:ResXDataNode是一种引用类型,因此新列表仍将引用相同的对象。