L'uso di using non ha nulla a che vedere con la gestione degli errori, che è possibile attuare sia in presenza che in assenza di using.Originariamente inviato da eziogsv
No, è esattamente il contrario: l' errrore è MOLTO più probabile che avvenga su fs... con Using non lo puoi gestire.
Il fatto è che using andrebbe utilizzato per tutte le classi che implementano IDisposable, mentre tu l'hai utilizzato solo per una di queste (lo StreamReader) senza estenderlo anche a FileStream.
I warning che ti vengono restituiti sono abbastanza semplici da individuare.
Se usi il costrutto Try...Finally, dove il codice nel blocco Finally "finalizza" un oggetto, la sua creazione (con l'uso di New) deve essere fatta ovviamente all'esterno del blocco, altrimenti - qualora il costruttore non vada a buon fine - finisci per agire su una variabile che contiene un riferimento nullo.
La struttura corretta (seguendo il tuo esempio a grandi linee), quindi, è questa:
Con l'adozione di Using il codice si semplifica ulteriormente:codice:fs = New FileStream(My.Settings.LogPath & "\PokerStars.log.0", FileMode.Open, _ FileAccess.Read, FileShare.ReadWrite) Try ' ... Finally fs.Dispose() End Try
codice:Using fs As New FileStream(My.Settings.LogPath & "\PokerStars.log.0", FileMode.Open, _ FileAccess.Read, FileShare.ReadWrite) ' ... End Using
Tutte le impostazioni a Nothing che hai fatto nel codice, così come i relativi If...Then che hai inserito per controllare questo valore, sono inutili e possono essere rimossi.

Rispondi quotando