2009-11-12 2 views
1

익명 형식 속성 "Points"의 값이 "0"인 이유는 무엇입니까?익명 형식을 사용하는 Linq 문제

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 
+0

VB.NET이 (옵션으로) 변경 가능한 익명 형식을 지금까지 지원한다는 것을 몰랐습니다. C#은 불변의 익명 형식만을 지원하며, 현명한 결정이라고 생각합니다. – TrueWill

답변

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 

예상되는 동작을 제공해야합니다.

+0

고마워요! 그것은 효과가 있었다. – Fernando

관련 문제