2010-03-16 11 views
10

Quando ottenere SQL DateTime Resharper suggerisce di utilizzare new DateTime() quando il valore è DBNull.Value. Ho sempre usato DateTime.MinValue. Qual è il modo corretto?DateTime.MinValue vs new DateTime() in C#

DateTime varData = sqlQueryResult["Data"] is DateTime ? (DateTime) sqlQueryResult["Data"] : new DateTime(); 
+0

Grazie a tutti . – MadBoy

risposta

18

Da the documentation of DateTime.MinValue:

MinValue definisce la data e l'ora in cui viene assegnato ad una variabile non inizializzata DateTime.

Pertanto, la data risultante sarà la stessa. Poiché DateTime è un tipo di valore, entrambe le opzioni dovrebbero essere equivalenti. Personalmente, preferisco scrivere DateTime.MinValue, poiché è auto-documentante.

PS: È possibile considerare l'utilizzo di nullable types (DateTime?), se i dati possono contenere valori (significativi) nulli.

0

Non esiste un modo "corretto". C'è una convenzione che le persone creano e che la squadra segue.

DateTime.MinValue e new DateTime() sono definizioni valide per un valore null, se lo sviluppatore responsabile lo determina.

1

Direi di usare sempre MinValue perché in quel momento si sa esattamente quale valore ci sia dentro. Quando usi semplicemente il nuovo DateTime() lo stai inizializzando per contenere un valore, ma non specificando quale valore inserire in esso. È anche molto più pulito e chiaro mettere esplicitamente un valore in esso.

+1

new DateTime() in effetti lo imposta su un valore. è fondamentalmente 'default (DateTime)', che è impostato in base alle regole per la costruzione di un valore predefinito per una struttura. vale a dire. imposta i valori predefiniti per tutti i membri. – kervin

1

Il valore di default di DateTime è il DateTime.MinValue, quindi credo che non importa quale di questi si utilizza;)

+1

[citazione necessaria] –

2

Di solito, vorrei gestire il caso NULL esplicitamente. Qualcosa in questo senso:

In alcuni casi, potrebbe essere logico eseguire la logica anche se non sono presenti dati. In questi casi, solo tu sai quale valore predefinito iniziare. probabili candidati:

  • DateTime.MinValue
  • DateTime.MaxValue
  • DateTime.Now

non avrei mai usare new DateTime() in quanto ha molto scarsa leggibilità. Cosa restituisce questa affermazione? L'utente (e i futuri sviluppatori del progetto) potrebbero dover esaminare la documentazione per capire a cosa è inizializzato il valore.

0

Il modo più gestibile di rappresentare un valore nullo consiste nell'utilizzare un Nullable<DateTime>, ad esempio DateTime?. In questo modo il valore nullo è chiaramente rappresentato come non valore invece di un valore magico che richiede un trattamento speciale.

(Il valore null, naturalmente, ha anche bisogno di un trattamento speciale, ma è molto più difficile da trascurare.)

Se si utilizza un valore magico per rappresentare i valori nulli, nessun valore è molto meglio di qualsiasi altro.È possibile utilizzare DateTime.MinValue o new DateTime() (che fornisce lo stesso risultato) oppure è possibile utilizzare qualsiasi valore arbitrario che non rientra nell'intervallo utilizzato dall'applicazione.

Un valore come DateTime.MinValue ha un leggero vantaggio in quanto è già definito come una costante, d'altra parte si può definire il proprio costante che ha un nome un po 'meglio, per esempio:

public const DateTime DateThatMeansNull = new DateTime(1685, 3, 21); 
+0

Che non verrà compilato - "Il tipo 'System.DateTime' non può essere dichiarato const" – Ryan