Pregunta

Quiero comparar dos valores en tiempo de ejecución utilizando la reflexión. Yo estaba usando Comparer.Default.Compare (x, y) para esto, pero me he dado cuenta de que esto no es suficiente. Digamos que quiero comparar un doble con una sola (1,0 == 10). Comparer.Default arrojará una excepción, ya que insiste en que ambos valores deben ser del mismo tipo (doble). Sin embargo, existe una conversión explícita para esto, que es realmente lo que desea utilizar.

Así que, ¿por qué no puedo usar Convert.ChangeType? Tomemos el caso de 1.25> 1 (doble> entero). Si intento Convert.ChangeType (1,25, typeof (int)) en 1.25, voy a tener 1, y la afirmación anterior a fallar, cuando en realidad 1.25 es> 1.

Así que, por favor alguien puede sugerir una manera de invocar la comparación explícita (si existe) que define un tipo?

Gracias.

¿Fue útil?

Solución

¿Está utilizando C # .NET 4 y 4? Si es así, es muy fácil usando tipado dinámico:

dynamic x = firstValue;
dynamic y = secondValue;
if (x > y) // Or whatever

El compilador realiza todas las conversiones apropiadas para usted.

scroll top