2011-09-12 37 views
0
'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 

请问这样:复制Linq查询列出

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查询仍然会引用相同的数据?

回答

3

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

顺便提一下,称movedNodes.ToList()会比手动添加每一个简单的...

现在是完全有可能每次迭代movedNodes可能创建新的对象 - 这真的取决于它的这样做,而且你没有展示它是如何创建的。但是复制到列表并不是创建新的对象。

+0

@Downvoter:关心评论? –

+0

我把其余的代码。我尝试.ToList,它似乎做我想要的。有趣的是,它的工作方式不同于循环和添加。 – dotnetN00b

+0

以什么方式不同? – Magnus

3

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

编辑:ResXDataNode是一个引用类型,所以新的列表仍然会引用相同的对象。

+0

你是对的。我想一个.Clone方法是不需要的。由于.ToList。 – dotnetN00b