Gestione errore System.InvalidCastException utilizzando try

di il
9 risposte

Gestione errore System.InvalidCastException utilizzando try

Salve a tutti,

premetto che sono autodidatta, 

avrei bisogno di gestire un possibile errore “System.InvalidCastException”

in pratica ho fatto in questo modo:

try

espressione che può generarmi l'errore

      Catch ex As System.InvalidCastException

espressione che può generarmi l'errore

      Catch ex As System.InvalidCastException

espressione che può generarmi l'errore

finally

cosi facendo comunque quando si genera l'errore l'applicazione viene interrotta !!

Dove sbaglio ?

Grazie.

9 Risposte

  • Re: Gestione errore System.InvalidCastException utilizzando try

    Ci fai vedere un esempio concreto di queste espressioni?

    E comunque scritto in quel modo non ha senso

  • Re: Gestione errore System.InvalidCastException utilizzando try

    Ciao, in effetti non è molto chiaro il contesto e come usi il try

    A occhio dovresti intercettare qualsiasi eccezione… per esempio una cosa del genere :

    Try
        ' sottoporre al try catch
        ' tutto il codice da controllare
        ' per eventuali errori
        
    Catch ex As System.InvalidCastException
        ' gestione di cast non valido
        MessageBox.Show("Errore cast.")
    Catch ex As Exception
        ' gestione per tutte le eccezioni
        MessageBox.Show("Errore: " & ex.Message)
    Finally
        ' qui inserire se hai altro codice da eseguire comunque
        ' sempre, anche se si verifica un errore di eccezione
    End Try

    Ovviamente al posto del MessageBox o assieme ad esso, puoi inserire il codice da eseguire in caso di errore.

  • Re: Gestione errore System.InvalidCastException utilizzando try

    Salve a tutti e scusate se sono stato poco chiaro, con questa immagine spero di spiegarmi meglio, 

    in pratica il sistema mi va in errore perche NON riesce ad eseguire il cast.

    Quello che voglio ottenere è che se NON riesce ad eseguire il cast  mi dovrebbe tentare di eseguire il cast  all'interno del catch successivo ed invece si blocca e mi va in errore.

  • Re: Gestione errore System.InvalidCastException utilizzando try

    Da quello che scrivi non si capisce se vuoi tentare di fare tutti e tre i calcoli o solo il primo che va bene.

    Partiamo da un suggerimento, scrivi così

            Try
               chk = "Curve"
               ... prima espressione che può generare l'errore ...
               chk = "Curve Composte"
               ... seconda espressione che può generare l'errore ...
               chk = "Superfici"
               ... terza espressione che può generare l'errore ...
           Catch ex As System.InvalidCastException
               PresenzaErrore = 1
           End Try

    Se è quello che volevi ottenere ok, altrimenti spiega meglio

  • Re: Gestione errore System.InvalidCastException utilizzando try

    Ciao oregon e grazie del suggerimento ! ma cosi non va bene,

    mi spiego

    le entita selezionate sono di tipo generico ed io tramite il cast le vorrei “convertire” in un tipo specifico che può essere “ curva” “curva composta” o “superficie”.

    Non sapendo che tipo di entita ho nella lista “entita selezionate” io vado per tentativi.

    Provo a fare il cast delle entita selezionate in Curve se mi restituisce un errore provo a fare il cast delle entita selezionate in curve composte ed infine se ancora mi restituisce errore prova a fare il cast in superfici.

  • Re: Gestione errore System.InvalidCastException utilizzando try

    Ecco, avevo capito che la spiegazione iniziale era ambigua …

    In questo caso dovresti tenere in considerazione l'uso della TryCast (vedi la documentazione per il suo uso) che semplificherebbe tutto.

    In alternativa, seguendo la strada della Try, devi fare diversamente

            Try
                PresenzaErrore = 0
    
                chk = "Curve"
                ... prima espressione che può generare l'errore ...
            Catch ex1 As System.InvalidCastException
                Try
                    chk = "Curve Composte"
                    ... seconda espressione che può generare l'errore ...
                Catch ex2 As System.InvalidCastException
                    Try
                        chk = "Superfici"
                        ... terza espressione che può generare l'errore ...
                    Catch ex3 As System.InvalidCastException
                        PresenzaErrore = 1
                    End Try
                End Try
            End Try
    
  • Re: Gestione errore System.InvalidCastException utilizzando try

    Perfetto ! grazie.

    Cosi va, ora provo a vedere anche il TryCast !

    Grazie ancora

  • Re: Gestione errore System.InvalidCastException utilizzando try

    Ciao,
    Come indicato da Oregon potresti fare una cosa di questo tipo:

    Inizializzare tutto = Nothing
    - CurveSelezionate
    - CurveComposteSelezionate
    - SupSelezionate
    - Chk

    Poi in seguenza provare a fare il cast per determinare in  chk  il valore da assumere

    ' cast PsCurve
    If CurveSelezionate Is Nothing Then
       CurveSelezionate = TryCast(psm.SelectedItems.Cast(Of PsCurve)().ToList(), List(Of PsCurve))
       If CurveSelezionate IsNot Nothing Then
           chk = "Curve"
       End If
    End If
    
    ' cast  PsCompCurve 
    If String.IsNullOrEmpty(chk) Then
       CurveComposteSelezionate = TryCast(psm.SelectedItems.Cast(Of PsCompCurve)().ToList(), List(Of PsCompCurve))
       If CurveComposteSelezionate IsNot Nothing Then
           chk = "Curve Composte"
       End If
    End If
    
    ' cast PsSurface
    If String.IsNullOrEmpty(chk) Then
       SupSelezionate = TryCast(psm.SelectedItems.Cast(Of PsSurface)().ToList(), List(Of PsSurface))
       If SupSelezionate IsNot Nothing Then
           chk = "Superfici"
       End If
    End If
    
    ' gestire se nessun cast è valido - chk è ancora nothing
    If String.IsNullOrEmpty(chk) Then
        
        ....
        ...
    End If

    Ad ogni test verificare se IsNot Nothing e assumere il valore desiderato e non eseguire altri cast quando chk <> da nothing
    Alla fine dei test se ancora chk = Nothing allora vuol dire che nessun cast è risultato valido 

    Potrebbe essere una logica da seguire… 

  • Re: Gestione errore System.InvalidCastException utilizzando try

    Grazie,

    grazie infinite a tutti per i preziosi consigli !!

Devi accedere o registrarti per scrivere nel forum
9 risposte