Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237

    [VB.NET] For Each su Array di Point non "funziona"

    Ciao ragazzi
    Mi scuso per il titolo ma non so trovare parole migliori per spiegare il "fenomeno".
    Sto trafficando con array di Point, ecco un codice di esempio:
    codice:
    Dim s(3) As Point
    s = {New Point(1, 0), New Point(2, 0), New Point(3, 0), New Point(4, 0)}
       For Each p As Point In s
            p.X = 10
            Debug.Print("ciclo" & p.X.ToString)
        Next
    Debug.Print(s(0).X.ToString)
    Se faccio girare questo codice ottengo in output questo
    ciclo10
    ciclo10
    ciclo10
    ciclo10
    1 <------
    Com'è possibile che la X del point 0 valga ancora 1, nonostante abbia specificato che deve valere 10?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    In attesa che qualcuno mi spieghi perché non funziona usare il punto "p" come reference posto una soluzione tampone..

    codice:
    Public Module MyExtention
        <Extension>
        Function ForEach(pArray As Point(), p As Point) As Point()
            For i As Integer = 0 To pArray.GetUpperBound(0)
                pArray(i).Offset(p.X, p.Y)
            Next
            Return pArray
        End Function
        <Extension>
        Function ForEach(pArray As Point(), X As Integer, Y As Integer) As Point()
            For i As Integer = 0 To pArray.GetUpperBound(0)
                pArray(i).Offset(X, Y)
            Next
            Return pArray
        End Function
    End Module

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da renygade Visualizza il messaggio
    In attesa che qualcuno mi spieghi
    Basterebbe leggere prima la documentazione della For Each, ad esempio quella ufficiale

    http://msdn.microsoft.com/en-us/libr...=vs.84%29.aspx

    dove dice

    Traversing Arrays. Because the Array class implements the IEnumerable interface, all arrays expose the GetEnumerator method.This means that you can iterate through an array with a For Each...Next loop.However, you can only read the array elements.You cannot change them.


    Per rimediare, accedi agli elementi dell'array con un classico ciclo

    codice:
            For ix As Integer = 0 To s.Length - 1
                s(ix).X = 10
                Debug.Print("ciclo" & s(ix).X.ToString)
            Next
            Debug.Print(s(0).X.ToString)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Basterebbe leggere prima la documentazione della For Each, ad esempio quella ufficiale

    http://msdn.microsoft.com/en-us/libr...=vs.84%29.aspx

    dove dice

    Traversing Arrays. Because the Array class implements the IEnumerable interface, all arrays expose the GetEnumerator method.This means that you can iterate through an array with a For Each...Next loop.However, you can only read the array elements.You cannot change them.


    Per rimediare, accedi agli elementi dell'array con un classico ciclo

    codice:
            For ix As Integer = 0 To s.Length - 1
                s(ix).X = 10
                Debug.Print("ciclo" & s(ix).X.ToString)
            Next
            Debug.Print(s(0).X.ToString)
    Ciao Oregon
    Grazie per la risposta/spiegazione... Ho risolto con la extention che effettivamente usa l'iterazione con gli indici per accedere agli elementi dell'array.. La domanda che mi sorge però spontanea è..
    Ma perché non posso modificare gli elementi? C'è un "motivo tecnico"? La mia è solo una semplice curiosità, solo per capire come funziona il tutto.
    Grazie di nuovo

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da renygade Visualizza il messaggio
    Ciao Oregon
    Grazie per la risposta/spiegazione... Ho risolto con la extention che effettivamente usa l'iterazione con gli indici per accedere agli elementi dell'array.. La domanda che mi sorge però spontanea è..
    Ma perché non posso modificare gli elementi? C'è un "motivo tecnico"? La mia è solo una semplice curiosità, solo per capire come funziona il tutto.
    Grazie di nuovo
    Semplicemente perché l'oggetto "Current" ottenuto dall'array durante il ciclo è una copia degli elementi dell'array e quindi la sua modifica non ha senso.

    Ciao
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Semplicemente perché l'oggetto "Current" ottenuto dall'array durante il ciclo è una copia degli elementi dell'array e quindi la sua modifica non ha senso.

    Ciao
    Ah, una copia clonata non un riferimento allo stesso oggetto... Giusto?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da renygade Visualizza il messaggio
    Ah, una copia clonata non un riferimento allo stesso oggetto... Giusto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Bene. Grazie.
    Alla prossima

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.