Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    26

    [VB.NET] Programmazione ad Oggetti. Creare un ciclo For Each per gli elementi appartenenti ad una classe

    Ciao a tutti sono un neo iscritto e spero di aver scritto correttamente il topic.
    Veniamo al punto. In una applicazione console ho creato una classe con molti elementi e avrei bisogno di creare un ciclo For Each per individuare quelli che hanno un determinato valore in una proprietà preimpostata.
    Metto un esempio banale di codice che mi è venuto in mente.
    codice:
    Module Module1
    
    
        Sub Main()
            Dim ferrari As New Automobili
            Dim ford As New Automobili
            Dim maserati As New Automobili
            Dim alfaromeo As New Automobili
    
    
            ferrari.decappottabilità = "SI"
            ford.decappottabilità = "NO"
            maserati.decappottabilità = "SI"
            alfaromeo.decappottabilità = "NO"
            For Each elemento In Automobili
                If decappottabilità = "SI" Then
                    Console.WriteLine(elemento)
                End If
            Next
    
    
    
    
        End Sub
        Class Automobili
            Private _decappottabilità As String
            Public Property decappottabilità() As String
                Get
                    Return _decappottabilità
                End Get
                Set(ByVal value As String)
                    _decappottabilità = value
                End Set
            End Property
    
    
        End Class
    End Module
    Non so come fare.
    Ne approfitto per chiedere anche come si possono evitare le virgolette per i SI e i NO facendomeli suggerire già da VB come per gli altri elementi predefiniti in tal modo che la proprietà accetti solo Si e NO.
    Mi sto approcciando da poco alla programmazione ad oggetti e sarei grato anche ad altri suggerimenti se vedete nel codice qualcosa da migliorare. Grazie in anticipo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    Se hai definito quattro istanze della tua classe Automobili, non puoi usare il for each per analizzarle.
    Sarebbe quindi meglio usare un Lista di oggetti List(Of Automobili), ogni volta che crei un oggetto lo inserisci in questa lista, e poi puoi usare il FOR EACH per analizzare gli elementi.

    Per il discorso del SI e NO, puoi definire nella tua classe un ENUM che abbia solo SI e NO come valori, e poi devi dire che la proprietà "decappotabilità" non è di tipo stringa ma è del tipo enum appena dichiarato

    Sergio

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    26
    Per il list(of automobili) mi dice "List è un tipo e non può essere utilizzato come espressione".
    Per l'enum vorrei non ho capito in che punto della classe va inserito.
    Grazie ancora per l'aiuto

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    Per definire una lista di oggetti devi usare (ad esempio)
    codice:
    Dim ListaAutomobili As List(Of Automobili)

    Per l'enum la tua classe potrebbe essere così
    codice:
    Class Automobili
    
        Public Enum DecappottabilitaValues As Integer
            No = 0
            Si = 1
        End Enum
    
        Private _decappottabilità As DecappottabilitaValues
        Public Property decappottabilità() As DecappottabilitaValues
            Get
                Return _decappottabilità
            End Get
            Set(ByVal value As DecappottabilitaValues)
                _decappottabilità = value
            End Set
        End Property
    
    End Class
    Sergio

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    26
    Per quanto riguarda l'enum ho risolto. Chiedo solo se è possibile inserire una proprietà formata da due parole.
    Per la list ecco il mio codice.
    codice:
    Module Module1
    
    
    
    
        Sub Main()
            Dim ferrari As New Automobili
            Dim ford As New Automobili
            Dim maserati As New Automobili
            Dim alfaromeo As New Automobili
            Dim listaautomobili As List(Of Automobili)
    
    
            ferrari.decappottabilità = Automobili.DecappottabilitaValues.Si
            ford.decappottabilità = Automobili.DecappottabilitaValues.Si
            maserati.decappottabilità = Automobili.DecappottabilitaValues.Si
            alfaromeo.decappottabilità = Automobili.DecappottabilitaValues.Si
            For Each elemento In listaautomobili
    
    
    
    
                Console.WriteLine(elemento.decappottabilità = Automobili.DecappottabilitaValues.Si)
                Console.ReadLine()
            Next
    
    
    
    
    
    
    
    
        End Sub
        Class Automobili
            Public Enum DecappottabilitaValues As Integer
                No = 0
                Si = 1
            End Enum
    
    
            Private _decappottabilità As DecappottabilitaValues
            Public Property decappottabilità() As DecappottabilitaValues
                Get
                    Return _decappottabilità
                End Get
                Set(ByVal value As DecappottabilitaValues)
                    _decappottabilità = value
                End Set
            End Property
        End Class
    End Module
    Mi dice NullReferenceexception sulla riga for each.
    Abuso ancora della vostra pazienza ma non riesco a venirne a capo.
    Grazie ancora.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    26
    Ho notato adesso che se io faccio scrivere al computer
    codice:
    Console.writeline(ferrari.decappottabilità)
    mi dice 1 e non si

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    Certo, perchè gli enum sono dei valori Integer e non dei valori String.

    Mi sa che per quello che vuoi fare tu è meglio che torni ai string che avevi prima

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    Hai definito
    Dim listaautomobili As List(Of Automobili)
    ma la lista è vuota, devi aggiungere a questa lista degli oggetti, è ovvio che dica NullReferenceexception, oltre che vuota non è nemmeno inizializzata

    Sergio

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    guarda se va

    codice:
    Option Strict On
    
    Module Module1
    
        Sub Main(args As String())
            Dim ListaAutomobili As New List(Of Automobili)
    
            ListaAutomobili.Add(New Automobili("Mercedes", True))
            ListaAutomobili.Add(New Automobili("Panda", False))
    
            For Each automobile As Automobili In ListaAutomobili
                Console.WriteLine("Automobile: {0}, Decapotabilità: {1}", automobile.Nome, automobile.Decapotabilita)
            Next
    
    
    
    
    
            Console.Write("Premere un tasto per continuare . . . ") : Console.ReadKey()
        End Sub
    
    
    End Module
    
    
    Class Automobili
        Public Property Nome As String
        Public Property Decapotabilita As Boolean
    
        Public Sub New(nome As String, decapotabilita As Boolean)
            Me.Nome = nome
            Me.Decapotabilita = decapotabilita
        End Sub
    End Class
    Pietro

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    Ben fatto Pietro !!

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.