Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280

    [c#] try catch e finally

    ciao, volevo capire bene come funzionano questi try catch e finally, quello che ho capito io è che, prima viene eseguito ciò che è scritto in try, poi se ci sono errori si esegue la procedura catch, e se nn ci sono stati errori si esegue la procedura finally, volevo chiedervi numero 1 se è vero quello che ho capito è giusto, e poi alcune domande...
    -come errori, intendiamo interruzioni di programma? del tipo "file inesistente???"
    -cosa succede se ci sono + catch?
    -come faccio a sapere qual è l'errore che si è verificato in modo tale da porterlo gestire?
    esempio..
    aprendo un file ci può essere l'errore di file inesistente, oppure può darmi un altro tipo di errore qualsiasi, come faccio a sapere di quale errore si tratta? ad esempio se voglio gestire il file inesistente, metto in catch un msgbox con su scritto "file inesistente", e se si tratta di un altro errore?? grazie mille
    ps..
    come faccio a trasformare una string in un double o in un float?

  2. #2
    il finaly viene eseguito sia se c'è errore, sia non ci sia stato un errore..
    quindi viene eseguito sempre.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280
    e se per esempio metto un fclose in un finally, e c'è un errore un try nn mi dà un errore poichè il file nel try nn è stato aperto?

  4. #4
    All'interno del blocco try si inseriscono istruzioni/chiamate a metodi che potrebbero generare eccezioni (lanciate con l'istruzione throw).
    Nei blocchi catch (ce ne può essere più di uno) si inserisce il codice da eseguire in risposta ad ogni tipo di eccezione.
    Nel blocco finally si inserisce il codice che verrà *SEMPRE* eseguito, indipendentemente dal fatto che si siano verificate eccezioni o meno.
    e se per esempio metto un fclose in un finally, e c'è un errore un try nn mi dà un errore poichè il file nel try nn è stato aperto?
    In termini di gestione delle eccezioni il codice contenuto nei blocchi catch o finally è da considerarsi al di fuori del try: se si verifica un'eccezione lì e il blocco try...catch...finally non è incluso in un ulteriore try C# risalirà lo stack delle chiamate alla ricerca di codice di gestione degli errori; in caso non lo trovi il programma terminerà mostrando all'utente un messaggio di errore.
    aprendo un file ci può essere l'errore di file inesistente, oppure può darmi un altro tipo di errore qualsiasi, come faccio a sapere di quale errore si tratta? ad esempio se voglio gestire il file inesistente, metto in catch un msgbox con su scritto "file inesistente", e se si tratta di un altro errore??
    È ben per questo che ci possono essere più catch:
    codice:
    using System;
    using System.IO;
    using System.Windows.Forms;
    void Test()
    {
    FileStream fs;
    try
    {
    fs=File.Create(@"c:\prova\test.txt");
    //eccetera
    }
    catch (DirectoryNotFound ex)
    /*Importante: questo blocco catch *DEVE* trovarsi prima del blocco che gestisce IOException, poiché altrimenti l'eccezione DirectoryNotFound verrebbe catturata da esso, in quanto classe derivata da IOException*/
    {
    MessageBox.Show("Can't find the folder \"prova\".)
    }
    catch (IOException ex) //dentro alle parentesi si specifica il tipo di eccezione da gestire e l'oggetto che ne conterrà i dati
    {
    MessageBox.Show("IO Exception: " + ex.Message);
    }
    catch (Exception ex)
    /*Tutte le eccezioni sono classi derivate da System.Exception, per cui tutto ciò che non è stato gestito prima viene catturato adesso.
    Ovviamente questa deve essere l'ultima catch del blocco try...catch...finally*/
    {
    MessageBox("Generic exception: " + ex.Message);
    }
    finally
    {
    //Se il file è stato effettivamente aperto lo chiude
    if (!(fs==null)) fs.Close();
    }
    Questa è solo una overview di questo costrutto estremamente versatile su cui si basa tutta la gestione degli errori di C# e di molti altri linguaggi .NET. Ti consiglio di dare un'occhiata ai seguenti link:

    e soprattutto di comprarti un buon libro su C#.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Ho spostato la discussione all'interno del forum dedicato a Visual Basic (VBx, VBA, ...) e ai linguaggi per .NET Framework (VB.NET, C#, ...).

    In futuro, poni in questo forum le domande relative a questi linguaggi.

    Ciao!
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.