ProgrammazioneProgrammatore VB.NET

Come avviene il casting/conversione dei tipi in Visual Basic, quali sono i principali problemi che possono sorgere durante l'uso delle conversioni e come evitarli in modo sicuro?

Supera i colloqui con l'assistente IA Hintsage

Risposta

In Visual Basic, le conversioni di tipo possono essere esplicite e implicite:

  • Conversione esplicita (Explicit): avviene tramite operatori come CInt(), CDbl(), CStr(), DirectCast, TryCast e altri.
  • Conversione implicita (Implicit): avviene automaticamente quando si assegna un valore a una variabile di un altro tipo, se i tipi sono compatibili.

Per affidabilità, si consiglia di:

  • Utilizzare Option Strict On — questo vieta le conversioni implicite, richiedendo conversioni esplicite e prevenendo errori di runtime.
  • Gestire eventuali eccezioni durante la conversione di tipi.

Esempio:

Option Strict On Dim a As Integer Dim b As Double = 4.5 'a = b ' Errore di compilazione! a = CInt(b) ' Corretto: Conversione esplicita con possibile perdita della parte frazionaria 'Conversione delle stringhe Dim s As String = "123" Dim n As Integer = Integer.Parse(s)

Domanda trabocchetto

Quali rischi sono associati all'uso della funzione Val() per convertire una stringa in un numero e perché viene spesso sconsigliata?

Risposta:

Val() converte solo l'inizio numerico della stringa fino al primo simbolo non numerico. Se la stringa inizia con una lettera o un simbolo speciale, restituisce 0. Questo può nascondere errori, se ci si aspettava di convertire il valore intero.

Esempio:

Dim value1 = Val("123abc") ' restituirà 123 Dim value2 = Val("abc123") ' restituirà 0 ! ' Meglio utilizzare: Integer.TryParse("abc123", val)

Esempi di errori reali dovuti alla scarsa conoscenza delle sfumature del tema


Storia

In un sistema ERP i valori venivano letti dal database e a causa di una conversione implicita da stringa a Integer senza controllo, veniva sollevata un'eccezione in presenza di dati non validi. Questo fermava l'intero modulo di reportistica.


Storia

Durante l'integrazione con un sistema obsoleto, un programmatore utilizzava Val per convertire stringhe, e alcune stringhe iniziavano con lettere (ad esempio, "A1234"). Risultato — perdita di identificatori, interpretati erroneamente come 0, e malfunzionamento nel programma di fidelizzazione dei clienti.


Storia

Un sviluppatore utilizzava DirectCast per il casting degli oggetti senza controllare la compatibilità dei tipi. Quando arrivava un oggetto di tipo imprevisto, veniva sollevata un'InvalidCastException e si interrompeva la catena di elaborazione dati.