2010-04-22 24 views
19

Anoche estaba haciendo algunas rutinas de conversión de tipo para un sistema en el que estoy trabajando. Una de las conversiones implica convertir los valores de cadena en sus equivalentes DateTime.¿Cuál es el punto de Convert.ToDateTime (bool)?

Al hacer esto, noté que el método Convert.ToDateTime() tenía una sobrecarga que aceptaba un parámetro booleano.

¿Primera pregunta? ¿Bajo qué circunstancias podría esto ser útil alguna vez?

Fui un poco más allá e intenté ejecutar el método en QuickWatch. De cualquier manera (verdadero o falso), la rutina devuelve una InvalidCastException.

¿Segunda pregunta? ¿Por qué este método está aquí?

EDITAR

Gracias por las respuestas, chicos. Puedo ver cómo se tiene sentido desde un punto de vista contractual, pero parece extraño que el marco básico incluye métodos que: -

  • nunca puede trabajar
  • Peor aún, en realidad será una excepción cuando alguien intenta llamarlo

Es un poco como alguien que hace un coche cargado con los controles que se detienen de forma activa su vehículo de trabajo cuando se utiliza.

+3

no solo "deja de funcionar", en realidad, haz que se cuelgue :-) –

+1

Eric Lippert no estará demasiado orgulloso de este trabajo del equipo de BCL. Según él, cada característica no se implementa por defecto y se implementa solo si surge la necesidad de costo/demanda. Aparentemente alguien era demasiado rico en BCL :) Prácticamente no sirve para clientes. – nawfal

Respuesta

6

Tiene sentido porque ToDateTime es parte de la interfaz IConvertible implementada por bool. Si miras en el reflector verás que arroja un InvalidCastException.

actualización (de Convert):

public static DateTime ToDateTime(bool value) 
{ 
    return ((IConvertible) value).ToDateTime(null); 
} 
+3

Pero: este es un método estático que no puede ser parte de una interfaz.Entonces esto no es lógico en absoluto. –

+0

@Stefan Steinegger ver mi actualización. –

+3

Aún así: no sirve de nada implementar un método estático que no se debería invocar. El método estático está vinculado estáticamente por el compilador, no hay nada dinámico aquí y no hay uso para este método. –

3

Si se mira de cerca, most de las sobrecargas no son válidos y lanzará una InvalidCastException.

Se tiene que aplicar toda de los modelos, ya que implementa IConvertible y esta es la única manera de hacerlo correctamente.

+3

Estos son métodos estáticos, no implementan ninguna interfaz. Entonces la pregunta sigue siendo: ¿por qué hay estos métodos allí? –

4

Creo que está ahí para completar y que se obtiene una InvalidCastException explícita al llamar a Convert.ToDateTime con un objeto que es un bool.

Si mira todos los miembros de Convert, puede ver que las sobrecargas se han incluido para aceptar todos los tipos básicos para la conversión a cada uno de los otros tipos básicos, con InvalidCastExceptions lanzados cuando no hay una conversión sensata.

Supongo que pensaron que esto sería más significativo que simplemente no tener las sobrecargas allí.

+3

Creo que esta es la única explicación para esto. El * pensamiento "sería mejor hacerlo completo. Pero en realidad, no sirve de nada. –