Newsgroup: it.comp.lang.visual-basic
Titolo: Array.foreach aiutatemi a capire come modificare un valore

Mi ci sono intestardito
 
Una struttura (l'errore è li? valore invece di riferimento? No perchè è 
un tipo complesso e dovrebbe comunque essere passato per riferimento 
no?)
Public Structure strutMenuGenerale
    Dim pagina As String
    Dim voce As String
    Dim submenu() As strutMenuGenerale
    Dim link As String
    Dim attivo As Boolean
End Structure
 
Module Strutture
    Public Function GeneraMenu() As strutMenuGenerale()
        Dim t(6) As strutMenuGenerale
        Dim s() As strutMenuGenerale
 
        'MENU Principale
        'HOMEPAGE
        t(0).pagina = "Default"
        t(0).submenu = Nothing
        t(0).link = "default.aspx"
        t(0).attivo = False
        t(0).voce = "Homepage"
        'AZIENDA
        t(1).pagina = "Azienda"
        t(1).link = "Azienda.aspx"
        t(1).attivo = False
        t(1).voce = "Azienda"
        'SUBMENU
        ReDim s(1)
        s(0).link = "chisiamo.aspx"
        s(0).pagina = "chisiamo"
        s(0).submenu = Nothing
        s(0).voce = "Chi siamo"
        s(0).attivo = False
 
        s(1).link = "contatti.aspx"
        s(1).pagina = "contatti"
        s(1).submenu = Nothing
        s(1).voce = "Per contattarci..."
        s(1).attivo = False
 
        t(1).submenu = s.Clone
....etc etc
 
 
una form di test
Imports System.Text
Imports System.Linq
 
Public Class Form1
    Friend MyLista() As strutMenuGenerale
   ....
    Private Sub Form1_Load(sender As System.Object, e As 
System.EventArgs) Handles MyBase.Load
        MyLista = Strutture.GeneraMenu
    End Sub
 
Controllo....carica tranquillamente dentro MyLista i tipi 
strutMenuGenerale
 
Ecco l'inghippo ora
mi accontenterei di cambiare il flag ATTIVO
 
scrivo
    Private Sub Button1_Click(sender As System.Object, e As 
System.EventArgs) Handles Button1.Click
   Stop
        Console.WriteLine("PRIMA Mylista(2).attivo " + 
MyLista(2).attivo.ToString)
        Array.ForEach(Of strutMenuGenerale)(MyLista, Function(obj)
                                                         obj.attivo = 
True
 
Console.WriteLine(obj.pagina)
                                                         Return True
                                                     End Function)
        Console.WriteLine("DOPO Mylista(2).attivo " + 
MyLista(2).attivo.ToString)
        Stop
 
 
    End Sub
 
 
porca vacca NON CAMBIA IL VALORE...o provato a scrivere un delegate e 
fare una funzione a parte....la richiama ci passa....ma NON CAMBIA IL 
VALORE!!!
 
ovviamente
Function(ByRef obj) mi da errore : la funzione annidfata non ha firma 
compatibile con il delegato system.action(of strutMenuGenerale)
 
 
pfffff....ho risolto a mano con un classico loop for each....ma che 
palle! lo sapevo far prima o lo so fare ora!
 
E' QUESTO nuovo foreach che non riesco a fare....dove sbaglio? Array o 
List dovrebbe essere uguale no? IEnumerable ambedue supportano!
SOB! HELP!
 
-- 
----- Italliaaaaa 3227! -----
Ci sono cattivi esploratori che pensano che non ci siano terre dove 
approdare solo perché non riescono a vedere altro che mare attorno a 
sé.
(Francesco Bacone)
 
 

 tipo complesso e dovrebbe comunque essere passato per riferimento no?)
 
è la struttura il problema, perché una struttura e non una classe?
 
.m
 
-- 
blog @ //
milestone.topics.it