2011-12-07 62 views
5

Se ho un DateTime, e lo faccio:Qual è la differenza tra .ToString() e + ""

date.Year.ToString() 

ho l'anno come String. Ma anche se lo faccio

date.Year + "" 

le differenze è solo che la seconda non ottiene un'eccezione se non c'è la data? (Che i prefeer)

risposta

4
date.Year.ToString() 

Non funziona se la data è nullo.

date.Year + "" 

Funziona anche se anno è nullo come binario + operatore sostituisce null con una stringa vuota.

Questo è ciò che dice di MSDN su binario operatore + concatenazione di due stringhe:

L'operatore binario + esegue la concatenazione di stringhe quando uno o entrambi gli operandi sono di tipo stringa. Se un operando di concatenazione di stringhe è nullo, viene sostituita una stringa vuota. Altrimenti, qualsiasi argomento non stringa viene convertito nella sua rappresentazione stringa richiamando il metodo ToString virtuale ereditato dall'oggetto type. Se ToString restituisce null, viene sostituita una stringa vuota.

Maggiori informazioni sul http://msdn.microsoft.com/en-us/library/aa691375%28VS.71%29.aspx

+0

'date.Year +" "' funziona anche se la data è nullo? Veramente? E come può un DateTime essere nullo in primo luogo? –

+2

Cosa ha detto Mark, come è nulla? Non è possibile solo se è stato dichiarato nullable? – dbasnett

10

Quando si scrive date.Year + "" sarà compilato come una chiamata a string.Concat(object, object):

String.Concat(date.Year, "") 

Internamente, il metodo Concat chiamerà ToString su ogni oggetto (non nullo).

Entrambi gli approcci generano un NullReferenceException se date è null. Ma hai detto che date è di tipo DateTime. DateTime è una struttura e quindi non può essere nullo.


Se date è di tipo DateTime? e vogliono restituire una stringa vuota se la data è nullo, allora è possibile utilizzare questo:

date.HasValue ? date.Value.Year.ToString() : "" 
+0

Uhm, io non la penso così! Nel secondo caso, se l'anno è nullo, non ricevo alcun errore/eccezione. Semplicemente, non fa nulla ... – markzzz

+1

@markzzz: 'Year' non può essere nullo. È di tipo 'int'. –

3

Non c'è differenza se date.Year non è nullo.

Nel secondo esempio il metodo ToString() viene chiamato implicitamente su date.Year.

Problemi correlati