Buongiorno a tutti.
Ho creato una classe per gestire degli oggetti: ho impostato la classe in modo che l'oggetto stesso mi indica se è nuovo, modificato o cancellato.
Ho successivamente creato una classe per gestire una List di questi oggetti (una sorta di collection).
In questa "collection" ho voluto implementare un funzionamento di questo tipo: quando inserisco un oggetto verifico se è nuovo e, se lo è controllo (attraverso delle proprietà) se l'oggetto non è già presente nella lista: se è già presente chiedo all'utente se vuole sovrascriverlo. Per sovrascriverlo pongo le proprietà dell'oggetto trovato ('found') pari a quelle dell'oggetto in inserimento ('item'), poi assegno l'oggetto trovato all'oggetto in inserimento (item=found). Di seguito il codice:
Il problema è che nella Sub Add, se CheckExsist ritorna True (dopo una sovrascrittura dell'oggetto 'item') mi aspetto sia stato variato (mi aspetto l'oggetto 'found' della Sub CheckExsist) in quanto è passato per riferimento, ed invece non lo è...
Ho inserito delle scritture nel log per capire ed infatti mi trovo la seguente sequenza:
- Before Check: True
- Before Assign: True
- After Assign: False
- After Check: True
Spero di essere stato chiaro.
Avete idea del perchè il riferimento non viene aggiornato, o meglio, aggiornato e poi ripristinato?
Grazie mille
Ho creato una classe per gestire degli oggetti: ho impostato la classe in modo che l'oggetto stesso mi indica se è nuovo, modificato o cancellato.
Ho successivamente creato una classe per gestire una List di questi oggetti (una sorta di collection).
In questa "collection" ho voluto implementare un funzionamento di questo tipo: quando inserisco un oggetto verifico se è nuovo e, se lo è controllo (attraverso delle proprietà) se l'oggetto non è già presente nella lista: se è già presente chiedo all'utente se vuole sovrascriverlo. Per sovrascriverlo pongo le proprietà dell'oggetto trovato ('found') pari a quelle dell'oggetto in inserimento ('item'), poi assegno l'oggetto trovato all'oggetto in inserimento (item=found). Di seguito il codice:
B4X:
Public Sub Add(item As Category)
If Not(item.IsNew) Then
mCategories.Add(item)
Else
Log("Before check: " & item.IsNew)
If CheckExist(item) Then
Log("After check: " & item.IsNew)
Save(item)
Else
If Save(item) Then Insert(item)
End If
End If
End Sub
B4X:
Private Sub CheckExist(item As Category) As Boolean
Private found As Category
found=Null
For Each c As Category In mCategories
If c.Description.ToLowerCase.CompareTo(item.Description.ToLowerCase)=0 Then found=c
Next
If Not(found=Null) Then
If Msgbox2("Category already exists. Overwrite existing category?",item.Description,"Yes","","No",Null)=DialogResponse.POSITIVE Then
found.Notes=item.Notes
Log("Before assign: " & item.IsNew)
item=found
Log("After assign: " & item.IsNew)
Return True
End If
End If
Return False
End Sub
Ho inserito delle scritture nel log per capire ed infatti mi trovo la seguente sequenza:
- Before Check: True
- Before Assign: True
- After Assign: False
- After Check: True
Spero di essere stato chiaro.
Avete idea del perchè il riferimento non viene aggiornato, o meglio, aggiornato e poi ripristinato?
Grazie mille
Last edited: