2010-03-16 43 views
10

Al obtener SQL DateTime Resharper sugiere utilizar new DateTime() cuando el valor es DBNull.Value. Siempre he usado DateTime.MinValue. ¿Cuál es la forma correcta?DateTime.MinValue vs new DateTime() en C#

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

Gracias a todos . – MadBoy

Respuesta

18

De the documentation of DateTime.MinValue:

MinValue define la fecha y la hora que se asigna a una variable sin inicializar DateTime.

Por lo tanto, la fecha resultante será la misma. Como DateTime es un tipo de valor, ambas opciones deben ser equivalentes. Personalmente, prefiero escribir DateTime.MinValue, ya que es autodocumentado.

PD: Es posible que desee considerar el uso de nullable types (DateTime?), si sus datos pueden contener (significativos) valores nulos.

0

No hay una manera "adecuada". Existe una convención que las personas establecen y que el equipo sigue.

DateTime.MinValue y DateTime() son definiciones válidas para un valor nulo, si el desarrollador a cargo así lo determina.

1

Yo diría que siempre use MinValue porque entonces usted sabe exactamente qué valor tiene. Cuando simplemente usa el nuevo DateTime() lo está inicializando para contener un valor, pero no especificando qué valor colocar en él. También es mucho más limpio y claro para ponerle un valor explícito.

+1

new DateTime() realmente lo establece en un valor. es básicamente 'predeterminado (DateTime)', que se establece en función de las reglas para construir un valor predeterminado para una estructura. es decir. establece valores por defecto para todos los miembros. – kervin

1

valor predeterminado de DateTime es la DateTime.MinValue, así que supongo que no importa cuál de estos se utiliza;)

+1

[citación necesitada] –

2

Por lo general, me gustaría manejar el caso NULL explícitamente. Algo sobre estas líneas:

if (!sqlQueryResults.IsNull("Data")) 
    DoComputationDependantOnDateTime((DateTime) sqlQueryResults["Data"]); 

En algunos casos, podría tener sentido realizar la lógica incluso si no hay datos. En tales casos, solo usted sabe de qué valor predeterminado debe partir. Los candidatos probables:

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

nunca usaría new DateTime() como lo ha hecho muy difícil de leer. ¿Qué devuelve esa declaración? Es posible que usted (y los futuros desarrolladores del proyecto) tengan que examinar la documentación para descubrir en qué se inicializa el valor.

0

La forma más sostenible de representar un valor nulo sería usar un Nullable<DateTime>, es decir, DateTime?. De esta forma, el valor nulo se representa claramente como un valor nulo en lugar de un valor mágico que necesita un tratamiento especial.

(El valor nulo, por supuesto, también se necesita un tratamiento especial, pero es mucho más difícil de pasar por alto.)

Si utiliza un valor mágico para representar los valores nulos, sin valor es mucho mejor que cualquier otro.Puede usar DateTime.MinValue o new DateTime() (que dan el mismo resultado), o puede usar cualquier valor arbitrario que esté fuera del rango que está usando su aplicación.

un valor como DateTime.MinValue tiene una ligera ventaja, ya que ya se ha definido como una constante, por otra parte, puede definir su propia constante que tiene un poco mejor nombre, por ejemplo:

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

Eso no compilará - "El tipo 'System.DateTime' no puede ser declarado const" – Ryan