Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [VB.NET]ArrayList di stringhe, con dimensione non fissata

    Se inizializzo un array di n elementi ci riesco,
    ma se devo creare un array o un arraylist come nel codice seguente
    in cui non dichiaro inizialmente la dimensione o gli elementi dell'array allora mi dà
    il seguente errore:

    "Object reference not set to an instance of an object."

    New String("prova") è una prova ovviamente mette quello ad ogni ciclo
    ma gia al primo ciclo si blocca e dà l'errore di prima, cosa devo istanziare?

    codice:
    Module Module1
    
        Sub Main()
    
            'arraylist
            Dim str3_arr As ArrayList = Nothing
            Dim int1 As Integer = 0
            For int1 = 0 To 10
                str3_arr.Add(New String("prova"))
            Next int1
    
            Dim str2 As String
            str2 = str3_arr(1).ToString()
    
            MsgBox(str2)
    
        End Sub
    
    End Module

  2. #2
    Nonostante sia ahimé antiquato, il C e anche lo stesso VB6 ti aiutano in questo caso. Nel tuo codice dichiari l'arrayList senza inizializzarlo a nulla. Prova con:

    codice:
    Module Module1
    
        Sub Main()
    
            'arraylist
            Dim str3_arr As New ArrayList ()
            Dim int1 As Integer = 0
            For int1 = 0 To 10
                str3_arr.Add(New String("prova"))
            Next int1
    
            Dim str2 As String
            str2 = str3_arr(1).ToString()
    
            MsgBox(str2)
    
        End Sub
    
    End Module
    Ciao
    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  3. #3
    Chipdb ha ragione: inoltre hai esplicitamente impostato l'arraylist a Nothing, il che equivale a distruggerlo logicamente. Non sorprende che poi venga fuori il classico errore che fa disperare tutti :P Comunque potresti usare una lista generic per risparmiare tempo e spazio, guadagnando in prestazioni.
    codice:
    Dim Lista As New List(Of String)
    E usare anche una variabile locale contatore del ciclo:
    codice:
    Module Module1
        Sub Main()
            'arraylist
            Dim str3_arr As New List(Of String)
            For int1 As Byte = 0 To 10
                str3_arr.Add(New String("prova"))
            Next int1
    
            MsgBox(str3_arr(1))
        End Sub
    End Module

  4. #4
    thanks a entrambi!

  5. #5
    ho provato a usare una dichiarazione di array di stringhe del tipo dim nomearray() as string
    ma così facendo nel for ho dovuto usare un redim (ipotizzando di non sapere quanti cicli servano)

    ci sono altri modi e non usare l'istruzione redim a ogni ciclo?


    ecco il codice che funziona con il redim, nel ciclo cè una riga commentata che avevo provato senza usare il redim, ma senza l'array inizialmente era lungo niente e dava errore

    codice:
    Module Module1
    
        Sub Main()
    
            Dim str5_arr() As String = New String() {}
            'arraylist
            Dim str3_arr As New ArrayList
            Dim int1 As Integer = 0
            For int1 = 0 To 10
                str3_arr.Add(New String("prova"))
                'str5_arr(int1) = "n.: " & int1.ToString()
                ReDim str5_arr(int1)
                str5_arr(int1) = "n.: " & int1.ToString()
            Next int1
    
            Dim str2 As String
            str2 = str3_arr(1).ToString()
            str2 = str5_arr(str5_arr.GetUpperBound(0))
    
            MsgBox(str2)
    
        End Sub
    
    End Module

  6. #6
    In realtà quel codice non dovrebbe funzionare... mi sembra strano che ReDim non elimini tutti i membri dell'array... va beh. Comunque la dichiarazion di un array come variabile può essere esplicita:
    codice:
    Dim Str(10) As String
    Usare ReDim è sconsigliabile poichè decrementa le prestazioni e è in questo caso inutile, poichè si sa a priori il numero di elemento dell'array, che rimane fisso e non cambia.
    codice:
    Module Module1
        Sub Main()
            Dim Str(10) As String
            
            For I As Byte = 0 To 10
                Str(I) = "n.: " & I
            Next
    
            Console.WriteLine(Str(Str.Length - 1))
            Console.ReadKey()
        End Sub
    End Module

  7. #7
    si ma in realtà nel codice che dovrò fare non so quanti elementi ho a da mettere dentro l'array quindi non posso mettere il numero di elementi

    in effetti con il redim mi reinizializza a nulli gli elementi dell'array a ogni ciclo quindi è da scartare

    ci sono soluzioni per il caso in cui non avessi info sul numero di elementi con cui riempire l'array e volessi usare un tipo di array di stringa del tipo dim arr5_str() as string ?

  8. #8
    Basta usare una variabile anzichè un numero, non ti pare?
    codice:
    Dim Num As Int32
    '...
    Dim A(Num - 1) As String

  9. #9
    ok , pensavo si potesse lasciare libero il parametro del numero di elementi dell'array
    farò così come dici per gli array di string


    Originariamente inviato da Il Totem
    Basta usare una variabile anzichè un numero, non ti pare?
    codice:
    Dim Num As Int32
    '...
    Dim A(Num - 1) As String

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,459
    Originariamente inviato da leonard_shelby
    si ma in realtà nel codice che dovrò fare non so quanti elementi ho a da mettere dentro l'array quindi non posso mettere il numero di elementi
    La classe ArrayList è pensata appositamente per risolvere questo problema.
    La stavi già utilizzando, perché mai l'hai abbandonata? :master:

    Se stai usando il .NET Framework 2.0, puoi inoltre sfruttare le classi basate sui Generics, creando liste tipizzate.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.