Sto cercando di capovolgerlo. Secondo this page su Using
dichiarazioni:Come l'istruzione di uso di C# si traduce in Try-Finally
L'istruzione using assicura che Dispose viene chiamato anche se un'eccezione si verifica mentre si sta chiamando metodi sull'oggetto. È possibile ottenere lo stesso risultato inserendo l'oggetto in un blocco try e quindi chiamando Dispose in un blocco finally; in effetti, questo è il modo in cui l'istruzione using viene tradotta dal compilatore.
Ma this page circa Try-Finally
blocchi si afferma:
All'interno un'eccezione gestita, il blocco associato, infine, è garantita da eseguire. Tuttavia, se l'eccezione non è gestita, l'esecuzione del blocco finally dipende da come viene attivata l'operazione di unwind dell'eccezione.
così come può una dichiarazione Using
essere garantiti per chiamare il metodo Dispose in caso di un'eccezione se si traduce in un Try-Finally
che non è garantito per chiamare il finally?
Non una risposta perché non so che ho ragione, ma credo che stia dicendo che se c'è un'eccezione non gestita all'interno dell'affermazione, alla fine non verrà chiamata. Ma con la dichiarazione di cattura che viene autocreata usando, non c'è nient'altro che una chiamata a dispose(). – GendoIkari
@GendoIkari: No, non è correlato al punto da cui viene lanciata l'eccezione, ma se è eventualmente catturato o meno. Un'eccezione alla fine catturata (gestita) invocherà il blocco finally, sempre (anche se un'altra eccezione è generata da un fermo). Un'eccezione non gestita, un po 'sorprendentemente, può o non può invocare l'ultimo. – Cameron
@ Cameron: Grazie. Suppongo che stavo dando per scontato che, se ne hai finalmente, anche tu gestisci le eccezioni. Ma suppongo che sia possibile avere un problema che gestisce solo eccezioni specifiche; o un tentativo/finalmente senza una presa. – GendoIkari