2011-04-11 22 views
16

Aquí hay dos formas de comparar dos DateTime:DateTime Comparación: DateTime.Compare() frente a operadores relacionales

DateTime now = DateTime.Now; 
DateTime then = new DateTime(2008, 8, 1); 

// Method 1 
if (DateTime.Compare(then, now) < 0) 
    // ... 

// Method 2 
if (then < now) 
    // ... 

.Compare devuelve un entero (-1,0,1) que indica si la primera instancia es anterior a , lo mismo que, o más tarde que la segunda instancia.

Mi pregunta es, ¿por qué debería utilizar .Compare cuando puedo utilizar operadores relacionales (<, <=, ==, >=, >) directamente? Me parece que, usando .Compare, necesito emplear operadores relacionales de todos modos (al menos en el ejemplo anterior, como alternativa, podría crear una instrucción switch que examine los casos -1, 0 y 1).

¿Qué situaciones preferirían o requerirían el uso de DateTime.Compare()?

Respuesta

14

Normalmente, los métodos .Compare en tipos se usan para ordenar, no para hacer comparaciones directas.

La interfaz IComparable<T>, cuando se admite en un tipo, permite que muchas clases de marco clasifiquen las colecciones correctamente (como List<T>.Sort, por ejemplo).

Dicho esto, si usted quiere ser capaz de hacer una comparación dentro de una clase genérica o método, lo que restringe sus argumentos genéricos a los tipos que implementan IComparable o IComparable<T> le permitirá utilizar .Compare() para las comparaciones cuando un tipo concreto es desconocida .

+0

Tiene perfecto sentido, gracias. – JYelton

5

Cuando pasa el objeto como IComparable, los operadores "relacionales" no están disponibles. En este caso, puede ser útil.

Cuestiones relacionadas