【问题标题】:Copying Linq query to List将 Linq 查询复制到列表
【发布时间】:2011-11-15 13:50:41
【问题描述】:
'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 查询仍会引用相同的数据?

【问题讨论】:

    标签: vb.net linq .net-3.5


    【解决方案1】:

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

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

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

    【讨论】:

    • 我把剩下的代码放上去。我尝试了 .ToList ,它似乎做了我想要的。有趣的是,它的工作方式与循环和添加不同。
    • @dotnetN00b:它不应该以不同的方式工作 - 它不会创建新的节点对象。
    【解决方案2】:

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

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

    【讨论】:

    • 你是对的。我想不需要 .Clone 方法。因为 .ToList.
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多