2011-12-07 55 views

Respuesta

4
date.Year.ToString() 

No funcionará si la fecha es nula.

date.Year + "" 

Funciona incluso si el año es nulo, ya que el operador binario + sustituye nulo con una cadena vacía.

Esto es lo que dice acerca de MSDN operador + binaria concatenar dos cadenas:

El operador binario + realiza la concatenación de cadenas cuando uno o ambos operandos son de tipo cadena. Si un operando de concatenación de cadenas es nulo, se sustituye una cadena vacía. De lo contrario, cualquier argumento que no sea cadena se convierte a su representación de cadena invocando el método virtual ToString heredado de tipo objeto. Si ToString devuelve null, se sustituye una cadena vacía.

Más información sobre http://msdn.microsoft.com/en-us/library/aa691375%28VS.71%29.aspx

+0

'date.Year +" "' funciona incluso si la fecha es nula? De Verdad? ¿Y cómo puede un DateTime ser nulo en primer lugar? –

+2

¿Qué dijo Mark, cómo es nulo? ¿No es eso solo posible si fue declarado nulo? – dbasnett

10

Cuando se escribe date.Year + "" se compilará como una llamada a string.Concat(object, object):

String.Concat(date.Year, "") 

Internamente, el método Concat llamará ToString en cada objeto (no nulo).

Ambos enfoques lanzarán un NullReferenceException si date es null. Pero dijiste que date es del tipo DateTime. DateTime es una estructura y por eso no puede ser nulo.


Si date es de tipo DateTime? y quieren devolver una cadena vacía si la fecha es nulo, puede utilizar esto:

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

Uhm, yo no lo creo! En el segundo caso, si el año es nulo, no obtengo ningún error/excepción. Simplemente, no hace nada ... – markzzz

+1

@markzzz: 'Year' no puede ser nulo. Es de tipo 'int'. –

3

No hay diferencia si date.Year no es nulo.

En el segundo ejemplo, se llama implícitamente al método ToString() en date.Year.

Cuestiones relacionadas