todatetime - datetime now c#




¿Cuál es el propósito de: public static DateTime ToDateTime(DateTime value) en.NET Framework? (3)

Aunque estoy de acuerdo con las respuestas aquí hasta ahora, creo que también hay otro aspecto, que es la generación de código. En los primeros días de .NET, la generación de código se realizaba con frecuencia utilizando CodeDOM (y algunas veces todavía lo es, por ejemplo, con WinForms Designer). CodeDOM no realiza un seguimiento del tipo de variables, ya que es posible que este tipo no se conozca en el momento de la generación del código (por ejemplo, si también se genera el tipo). Por lo tanto, es mucho más fácil generar una referencia a un método ToDate y hacer que el compilador determine cuál de las sobrecargas usar. Dado que estos métodos no son virtuales, pueden estar en línea y ni siquiera hay una penalización de rendimiento.

Dicho esto, estoy bastante seguro de que el generador de código de WinForms Designer no usa este método, al menos no en .NET 2.0, la versión más antigua con la que he trabajado.

Estoy manteniendo un proyecto existente y encontré esta línea de código:

Datetime someDate = ....;
var anotherDateTime = Convert.ToDateTime(someDate);

Al principio, esperaba que someDate se convirtiera en una cadena llamando ToString método ToString , pero estaba equivocado. Cuando presioné F12 en el método, veo la definición de ese método en la clase System.Convert , que es como la siguiente:

// Summary: Returns the specified System.DateTime object; no actual conversion is performed.
// Parameters:
//   value: A date and time value.
// Returns:
//     value is returned unchanged.
public static DateTime ToDateTime(DateTime value);

Primero ¿Por qué .NET Framework tiene un método como este en primer lugar, ya que la documentación dice que este método no hace nada?
Segundo Mientras estoy refactorizando el código, ¿puedo eliminar de manera segura la llamada para este método sin afectar el comportamiento?


Como se puede ver en las fuentes actuales de BCL :

public static DateTime ToDateTime(DateTime value) {
        return value;
}

no hay conversión real, por lo que puede eliminar esas llamadas de forma segura.


Sí, puedes eliminarlo. Es completamente redundante. En cuanto a por qué: supongo que alguien pensó que era una buena idea evitar que las personas Convert.ToDateTime(object) accidentalmente a Convert.ToDateTime(object) (que sería implícito), lo que implicaría un cuadro, una comprobación de tipo y unbox. Francamente eso me parece una razón tonta, en la línea de "escribir código incorrecto, obtener malos resultados".





datetime