Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用匿名类型的Linq存在问题_.net_Vb.net_Linq_Anonymous Types - Fatal编程技术网

.net 使用匿名类型的Linq存在问题

.net 使用匿名类型的Linq存在问题,.net,vb.net,linq,anonymous-types,.net,Vb.net,Linq,Anonymous Types,为什么匿名类型属性点的值仍然为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 =

为什么匿名类型属性点的值仍然为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
因为您的查询变量实际上代表一个查询,而不是一组实际的数据。每次枚举over query时,它将再次执行该操作;分配查询变量的声明定义了查询。枚举它将执行它。看起来您想要做的是以列表的形式创建查询的内存中表示。您可以这样做:

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

For Each o In list
    o.Points = 1
Next
这将提供您所期望的行为。

因为您的查询变量实际上代表一个查询,而不是一组实际的数据。每次枚举over query时,它将再次执行该操作;分配查询变量的声明定义了查询。枚举它将执行它。看起来您想要做的是以列表的形式创建查询的内存中表示。您可以这样做:

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

For Each o In list
    o.Points = 1
Next

这应该会提供您期望的行为。

直到现在,我才意识到VB.NET支持可变匿名类型作为选项。C只支持不可变的匿名类型,我认为这是一个明智的决定。直到现在我才意识到VB.NET支持可变的匿名类型。C只支持不可变的匿名类型,我认为这是一个明智的决定。