2009-10-11 14 views
19

Non ho mai usato i tipi nullable nel mio codice C#. Ora ho deciso di cambiare la mia pratica di codifica introducendo tipi nullable nel mio codice.Pratiche di codifica per C# Tipo Nullable

Quali sono i principali cambiamenti nelle pratiche di codifica dovrebbero essere fatte mentre si effettua una transizione da tipi di dati normali a tipi di dati nullable in caso di programmazione dell'applicazione?

Quali sono le aree che dovrebbero essere curate?

Quali sono i punti che dovrei sempre fare attenzione?

risposta

11

Nullable<T> è utile quando è necessario un possibile stato non valido per un tipo di valore o se i dati vengono recuperati da un database che potrebbe contenere un valore null per la colonna. È molto comune in qualche vecchio codice FORTRAN che sto eseguendo il porting su C# perché i valori non validi siano negativi o 0, ma ciò è problematico specialmente quando i valori sono usati in funzioni matematiche. È molto più esplicito utilizzare Nullable<T> per mostrare che lo stato possibile non è valido.

Vale la pena ricordare che la segue è la stessa:

Nullable<int> myNullableInt; 
int? myNullableInt; 
+10

Suggerimenti: Non dimenticare, il valore nullo dal database è rappresentato come DBNull.Value da ADO.NET. Assicurarsi di utilizzare DBNull.Value per comunicare con DB anziché null di Nullable . –

18

Non utilizzare i tipi nullable perché si tratta di una "novità interessante" che hai scoperto. Usali dove sono applicabili e veramente utili.

Ci sono dei costi generali per utilizzarli e, se utilizzati in modo non corretto, aumenteranno inutilmente la complessità del codice.

È inoltre necessario fare attenzione ad evitare le dereferenze nulle, quindi si impongono ulteriori oneri ai programmatori che lavorano con quel codice. (In alcuni casi questo è preferibile al costo di un approccio alternativo però!)

+0

Questa non è mai una buona idea. Coz nessuno sa quali cambiamenti stanno arrivando nel .net framework e potrebbe essere che il cambiamento sia interamente basato su tipi di Nullable. – anonymous

+5

@ JMSA: Non capisco cosa stai cercando di dire. –

+1

+1. I tipi "Nullable" sono incredibilmente utili quando ne hai bisogno, ma Jason ha ragione nell'evitare di sovraccaricare i chiamanti con la necessità di controllare i valori rispetto a null tutto il tempo. Prendi in considerazione la possibilità di lanciare un'eccezione se null non è valido. – TrueWill

1

Uso raramente tipi annullabili. L'unico posto in cui li ho usati è quando ho a che fare con tipi null nel database.

5

Un paio di altre buone idee per l'utilizzo di tipi nullable:

  • Non dimenticare la flessibilità nella sintassi. Nullable<int> corrisponde a int?
  • Controllare il valore null (var.HasValue) e convertirlo nel tipo di base prima di utilizzarlo come tipo di base.
+0

'lanciatelo sul tipo base prima di usarlo come tipo base'. - Non seguo cosa intendi qui ... Se vuoi il valore, usa solo 'var.Value' o anche 'var' se hai già controllato che ha un valore. – nicodemus13

+0

Oh, seguo ciò che intendi qui; intendi quando lo assegni ad una nuova variabile del tipo sottostante? – nicodemus13

+0

Sì. Cioè controlla sempre che il tuo Nullable abbia come valore prima di inserire quel valore in un int. – LJM

2

Essi sembrano adatti per il valore iniziale di alcune variabili di tipo valore.

int? lastCodeReceived; 

if (lastCodeReceived.HasValue) 
{ 
    // At least one code has been received. 
} 
8

Inoltre trovo la seguente proprietà utili:

public bool? IsHappy { get; set; } 

Questo mi permette di avere un tri-state valore booleano: sì, no, non si risponde.