I tipi Nullable sono buoni, ma solo per i tipi che non sono Nullable per cominciare.
Per rendere un tipo "annullabile", aggiungi un punto interrogativo al tipo, ad esempio:
int? value = 5;
Consiglierei anche di usare "as
" parola chiave invece di eseguire il cast. Puoi utilizzare la parola chiave "as" solo su tipi nullable, quindi assicurati di eseguire il casting di elementi che sono già nullable (come le stringhe) o di utilizzare tipi nullable come menzionato sopra. Il motivo è
- Se un tipo è annullabile, "
as
" la parola chiave restituiscenull
se un valore èDBNull
. - È sempre leggermente più veloce del casting, anche se solo in alcuni casi. Questo da solo non è mai un motivo sufficiente per usare
as
, ma insieme al motivo sopra è utile.
Consiglierei di fare qualcosa del genere
DataRow row = ds.Tables[0].Rows[0];
string value = row as string;
Nel caso precedente, se row
ritorna come DBNull
, quindi value
diventerà null
invece di generare un'eccezione. Tieni presente che se la tua query DB cambia le colonne/i tipi restituiti, utilizzando as
causerà un errore silenzioso del tuo codice e rendi i valori semplici null
invece di generare l'eccezione appropriata quando vengono restituiti dati errati, quindi si consiglia di disporre di test in atto per convalidare le query in altri modi per garantire l'integrità dei dati man mano che la base di codice si evolve.