Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET 2005] arraylist

Mi sto battendo con sto benedetto arraylist.
In un form, in cima dichiaro
Private MyArray as Arraylist
Private MyVariable as Integer
quindi effettuo il seguente controllo
dim MioNumero as integer = 3
dim i as integer
i=0
If Not MyArray.Contains(mioNumero) Then
	MyVariable = 'codice omesso
	i+=1
Enf If
if i=0 And MyArray.Count<>0 Then
	MyArray.Clear()
End if
in altre parti del codice, e in certe condizioni, eseguo
if MiaCondizione Then
	MyArray.Add(MyVariable)
End If
Non c'è verso di farlo girare. Mi da sempre errore all'altezza di
If Not MyArray.Contains(mioNumero) Then
con null exception.
La domanda è questa. Mentre per gli array c'è bisogno di dichiarare in 
partenza la dimensione o di fare redim in seguito, per ArrayList cioò 
non è richiesto. Ecco perchè ho scelto questo tipo di variabile.
Come benedetto dio devo fare a controllare se un dato elemento è 
presente nell'ArrayList?
Grazie

 con null exception.
[CUT]
Forse mi sono risposto da solo :)
Credo che la soluzione al problema stia nell'errata dichiarazione della 
variabile.
Così dovrebbe andare
Private MyArray as Arraylist = New ArrayList
Ho detto una cazzata?
Grazie

 Private MyArray as Arraylist = New ArrayList
Ti consiglio un buon tutorial o manuale .NET e forse anche di 
programmazione.
Anche in VB6 gli *oggetti* andavano *istanziati*.
In 
VB.NET
 puoi usare la piu' comoda:
Private MyArray As New Arraylist
che *non* ha lo stesso comportamento di VB6.
hth,
Lokar

 Anche in VB6 gli *oggetti* andavano *istanziati*.
E in 
vb.net
 quasi tutto sono oggetti :)
Detto questo, visto che si parla di vb2005 forse conviene usare un List Of 
Int32 anzichč un ArrayList.
Ciao
-- 
Free .Net Reporting Tool - 
http://www.neodatatype.net
 

 Ciao
Ciao

 Balena mi viene in aiuto :(
Non so se ho capito,
comunque di seguito un esempio:
 Private Sub Form1_Load(
        CostruzioneArraylist()
    End Sub
Private sl As SortedList
    Private Sub CostruzioneArraylist()
        'id => (Nome, Cognome, Password)?
        sl = New SortedList
        sl.Add(1, "mario,rossi,patata")
        sl.Add(2, "giovanni,parto,carota")
        sl.Add(3, "serena,polianna,melanzana")
    End Sub
  Private Sub btnArrayList_Click(
        Dim utente As String = String.Empty
        If VerificaEsistenzaUtente(utente, 2) = True Then
            MessageBox.Show("Utente rilevato:  " & utente)
        Else
            MessageBox.Show("Utente non autorizzato")
        End If
    End Sub
 Private Function VerificaEsistenzaUtente(ByRef utente As String, ByVal 
index As Int32) As Boolean
        Try
            index = sl.IndexOfKey(2)
            If index <> -1 Then
                utente = sl.GetByIndex(index).ToString()
                Return True
            Else : Return False
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Function
Se parti, guida in linea, da System.Collections
sotto questo namespace avrai la lista delle classi cui potrai collezionare 
elementi o coppia di elementi,
con la SortedList puoi aggiungere elementi senza impostare il numero
con sl = New SortedList(
l'IntelliSense visualizza  6 Overloading
Ave
giuseppeD
----
da una Roma solare 

 Balena mi viene in aiuto :(
bisogna aguzzare l'ingegno: le sole nozioni non bastano.
Dim a() As String = {"mario", "rossi", "pippo"}
Dim l As New List(Of String())
l.Add(a)
l.Add(New String() {"giuseppe", "verdi", "pluto"})
Console.WriteLine(l.Item(1)(2)) ' --> "pluto"
Ma forse la cosa più pulita sarebbe
Structure Persona
    Public Nome As String
    Public Cognome As String
    Public Password As String
    Public Sub New(ByVal nome As String, ByVal cognome As String, ByVal 
password As String)
        Me.Nome = nome
        Me.Cognome = cognome
        Me.Password = password
    End Sub
End Structure
Dim p As New Persona("mario", "rossi", "pippo")
Dim l As New List(Of Persona)
l.Add(p)
l.Add(New Persona("giuseppe", "verdi", "pluto"))
Console.WriteLine(l.Item(1).Cognome) ' --> "verdi"


Fabio ha scritto:

Non ci crederai, ma la via della structure l'ho provata più volte ma 
senza successo.
Ovviamente però non nella maniera da te suggerita (era molto spartana la 
mia soluzione).
Ad ogni modo proverò e studierò sia il tuo codice che quello di 
GiuseppeD e poi adotterò quello che "capirò" meglio :)
Grazie mille per la disponibilità.
Enrico

 Console.WriteLine(l.Item(1).Cognome) ' --> "verdi"
Alla fine ho adottato questa soluzione, che trovo davvero eccezionale.
L'ho adottata, e non lo nascondo, anche perché era quella che avevo 
tentato all'inizio se pur con scarso successo :)
Ti ringrazio davvero per la collaborazione, tutto funziona a meraviglia 
ora ;)
Ciao
Enrico
-------
http://enricofedele.kudolink.com