Que es igual a DateTime.MinValue, por lo que también podría hacerlo DateTime myDate = DateTime.MinValuetambién: /
Lloyd
20
@Lloyd La mayor parte del tiempo ... pero no como un parámetro predeterminado DateTime.MinValue no es una constante de tiempo de compilación, pero el valor predeterminado (DateTime) / new DateTime () sí lo es.
Ricibob
12
Solo para aclarar el excelente comentario de @ Ricibob, porque es importante: si está creando un método con un parámetro opcional, SOLO puede usar cualquiera default(DateTime)o new DateTime(). Ambas son constantes de tiempo de compilación , necesarias para valores de parámetros opcionales. Si no se requieren constantes de tiempo de compilación, a continuación default(DateTime), new DateTime()y DateTime.MinValueson intercambiables.
leanne
Respuestas:
200
No, son idénticos.
default(), para cualquier tipo de valor ( DateTimees un tipo de valor) siempre llamará al constructor sin parámetros.
FWIW; En C # 6, este comportamiento cambiará. C # 6 introduce constructores sin parámetros para estructuras, que permiten que el comportamiento de newdifiera de lo default(T)que hará.
vcsjones
30
Se podría argumentar que default(DateTime)es más descriptivo de la intención del programador, por lo tanto, más favorable generalmente.
intrepidis
16
@vcsjones, esto se eliminó antes del lanzamiento final de C # 6.0.
nawfal
55
@nawfal Sí. Probablemente lo mejor que hizo también.
vcsjones
Esta respuesta es simplemente IMO incorrecta: las dos cosas son semánticamente idénticas, pero ninguna de las dos llama a un constructor - ambas opciones de sintaxis usaninitobj
Marc Gravell
22
Si desea usar el valor predeterminado para un parámetro DateTime en un método, solo puede usar el valor predeterminado (DateTime).
¿Por supuesto que DateTime.MinValue no se compila? Los parámetros opcionales deben ser constantes de tiempo de compilación, que MinValue no es. Sin embargo, default (DateTime) y new DateTime () son válidos (lo cual es divertido, porque const DateTime x = default (DateTime) no es válido, ya que los valores de DateTime no pueden declararse como constantes de tiempo de compilación)
Jerri Kangasniemi
16
La respuesta es no. Tenga en cuenta que en ambos casos mdDate.Kind = DateTimeKind.Unspecified.
Por favor vea las primeras 4 palabras de mi respuesta.
Ben C
44
Yo argumentaría en contra de esto. El valor predeterminado DateTimees útil como un valor de valor no establecido, con una simple comparación con default(DateTime). ¿De qué sirve un 01/01/0001valor no predeterminado ?
Rawling
Tenga en cuenta que es DateTimeKind.Utc en lugar de DateTimeKind.UTC
Roberto
@Roberto Gracias, arreglado.
jpaugh
-3
La forma más sencilla de entenderlo es que DateTime es una estructura. Cuando inicializa una estructura, se inicializa a su valor mínimo:DateTime.Min
Por lo tanto no hay ninguna diferencia entre default(DateTime)y new DateTime()yDateTime.Min
No, las estructuras no se inicializan necesariamente a su valor mínimo. Se inicializan para que todos los bits sean cero. Para algunos tipos, ese es su valor más bajo, para otros, como los tipos numéricos que pueden ser negativos, no está cerca de su valor mínimo. Y, por supuesto, otros aún no serán comparables y no tendrán un valor "mínimo".
DateTime.MinValue
, por lo que también podría hacerloDateTime myDate = DateTime.MinValue
también: /default(DateTime)
onew DateTime()
. Ambas son constantes de tiempo de compilación , necesarias para valores de parámetros opcionales. Si no se requieren constantes de tiempo de compilación, a continuacióndefault(DateTime)
,new DateTime()
yDateTime.MinValue
son intercambiables.Respuestas:
No, son idénticos.
default()
, para cualquier tipo de valor (DateTime
es un tipo de valor) siempre llamará al constructor sin parámetros.fuente
new
difiera de lodefault(T)
que hará.default(DateTime)
es más descriptivo de la intención del programador, por lo tanto, más favorable generalmente.initobj
Si desea usar el valor predeterminado para un parámetro DateTime en un método, solo puede usar el valor predeterminado (DateTime).
La siguiente línea no se compilará:
Esta línea compilará:
fuente
La respuesta es no. Tenga en cuenta que en ambos casos
mdDate.Kind = DateTimeKind.Unspecified
.Por lo tanto, puede ser mejor hacer lo siguiente:
La
myDate.Kind
propiedad es de solo lectura, por lo que no se puede cambiar después de llamar al constructor.fuente
DateTime
es útil como un valor de valor no establecido, con una simple comparación condefault(DateTime)
. ¿De qué sirve un01/01/0001
valor no predeterminado ?La forma más sencilla de entenderlo es que DateTime es una estructura. Cuando inicializa una estructura, se inicializa a su valor mínimo:
DateTime.Min
Por lo tanto no hay ninguna diferencia entre
default(DateTime)
ynew DateTime()
yDateTime.Min
fuente