2009-11-12 5 views
1

Pourquoi la propriété de type anonyme "Points" a-t-elle toujours la valeur "0"?Problèmes avec Linq en utilisant le type anonyme

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

Je n'avais pas réalisé que VB.NET supportait (en option) les types anonymes mutables jusqu'à présent. C# ne supporte que les types anonymes immuables, et je pense que c'était une sage décision. – TrueWill

Répondre

5

Parce que votre query variable représente en fait une requête , pas un ensemble réel des données. Chaque fois que vous enumerez plus de query, il effectuera à nouveau l'action; votre déclaration (en affectant la variable query) définit la requête. Enumérant, il l'exécute. Ce que vous voulez faire, c'est créer une représentation en mémoire de la requête sous la forme d'une liste. Vous pouvez faire quelque chose comme ceci:

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

For Each o In list 
    o.Points = 1 
Next 

Cela devrait vous donner le comportement que vous attendez.

+0

Merci! Ça a marché. – Fernando

Questions connexes