Ciao raga ho un problema mi sono accorto di una cosa e sinceramente spero che ci sia un modo per fare quello che voglio perche se no è una porcata!

Vi faccio un esempio

class elemento
proprieta1
proprieta2
etc
end class



dim listElementi as list (of elemento)

''ovviamente popolata''

for each cursor as Elemento in listElementi
cursor.proprieta1 = "Qualcosa"
cursor.proprieta2 = "qualcos'altro"
next

gli elementi che volevo fossero modificati sono rimasti inalterati, penso perche cursor sia una copia elemento per elemento degli elementi presenti in listElementi giusto?
Conoscete un modo elegante di fare puntare cursor all'oggetto reale?
Anche perche cosi non mi sembra molto utile in for each!!

Grazie JAck

JJ Kuku Jan
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Il codice che hai postato dovrebbe funzionare. "cursor" non è una copia perché trattandosi di una classe il tipo di dato viene sempre gestito per riferimento. Nel ciclo "For Each", quindi, ottieni un riferimento all'oggetto nella lista (e non una copia).

Diverso è il caso in cui "elemento" non sia una classe ma una "Structure". In questo caso il tipo di dato viene gestito "per valore" e non per referenza. Modifiche all'interno del ciclo "For Each", pertanto, non hanno alcun effetto sui valori inseriti nella lista in quanto (appunto perché tipi di dati gestiti per valore) "cursor" non fa riferimento allo stesso oggetto in memoria bensì ad una copia dell'oggetto.

Se confermi che stai utilizzando una classe come oggetto base, allora prova a postare qualche altra riga di codice per individuare il problema.

Ciao.

.:. Marcello Rutter .:.
le proprieta sono cosi fatte:

class prova
private d_int as insteger
private d_string as string

public property intero as integer
''con get e set

public property stringa as string
'' come sopra

end class


for each cursor as prova in listElementi
cursor.intero = 10
cursor.stringa = "qualcos'altro"
next

Spero che tu possa essermi di aiuto!!

Grazie JAck

JJ Kuku Jan
501 messaggi dal 09 giugno 2006
Contributi
Ti posso aiutare ben volentieri se posti il codice completo includendo le parti omesse.

Intanto, per toglierti ogni dubbio sul funzionamento "By Reference", ti posto un piccolo programma VB.NET (una console application):

Module Module1

    Sub Main()

        Dim l As New List(Of X)

        ' Aggiungo due nuove istanze
        l.Add(New X(1, "Testo 1"))
        l.Add(New X(2, "Testo 2"))

        ' Visualizzo il loro valore
        For Each z As X In l
            Console.WriteLine(String.Format("A={0}, B={1}", z.A, z.B))
        Next

        ' Modifico il valore
        For Each z As X In l
            z.A += 10
            z.B = "Testo " & z.A.ToString()
        Next

        ' Visualizzo il nuovo valore
        For Each z As X In l
            Console.WriteLine(String.Format("A={0}, B={1}", z.A, z.B))
        Next

        Console.ReadLine()
    End Sub

    Public Class X
        Private _A As Integer
        Private _B As String

        Public Sub New()
        End Sub

        Public Sub New(ByVal myA As Integer, ByVal myB As String)
            Me.A = myA
            Me.B = myB
        End Sub

        Public Property A() As Integer
            Get
                Return _A
            End Get
            Set(ByVal value As Integer)
                _A = value
            End Set
        End Property

        Public Property B() As String
            Get
                Return _B
            End Get
            Set(ByVal value As String)
                _B = value
            End Set
        End Property


    End Class
End Module


Ciao.

.:. Marcello Rutter .:.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.