Linq使用匿名类型的问题

Fer*_*ndo 1 .net linq vb.net anonymous-types

为什么匿名类型属性"Points"仍然具有值"0"?

Public Class Test
    Public Sub New(ByVal _ID As Integer)
        ID = _ID
    End Sub
    Public ID As Integer
End Class


Dim list As New List(Of Test)
list.Add(New Test(1))
list.Add(New Test(2))
list.Add(New Test(3))

Dim query = From X In list Select New With {.Points = 0, X.ID}

For Each o In query
    o.Points = 1
Next
Run Code Online (Sandbox Code Playgroud)

Ada*_*son 5

因为您的query变量实际上代表一个查询,而不是一组实际的数据.每次枚举query它都会再次执行操作; 您的声明(分配query变量)定义查询.枚举它执行它.您想要做的是以列表的形式创建查询的内存中表示.你可以这样做:

Dim list = (From X In list Select New With {.Points = 0, X.ID}).ToList()

For Each o In list
    o.Points = 1
Next
Run Code Online (Sandbox Code Playgroud)

这应该会给你你期望的行为.