2011-09-12 111 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