Advertencia del compilador (nivel 3) CS1718

Actualización: noviembre 2007

Mensaje de error

Comparación con la misma variable. ¿Pretendía comparar otro elemento?
Comparison made to same variable; did you mean to compare something else?

Si deseaba efectuar la comparación con otro elemento, bastará con corregir la instrucción.

Sin embargo, otra posibilidad es que haya tratado de realizar una comprobación de true y false, pero con instrucciones como if (a == a) (true) o if (a < a) (false). Es mejor utilizar simplemente if (true) o if (false). Existen dos motivos para ello:

  • Es más fácil: siempre resulta más claro decir sencillamente lo que se quiere decir.

  • Ayuda a evitar la confusión: una nueva característica de C# 2.0 son los tipos de valores que aceptan valores NULL. Ésta es análoga al valor null de T-SQL, el lenguaje de programación utilizado por SQL Server. Los desarrolladores que conocen T-SQL podrían tener dudas sobre el efecto de los tipos que aceptan valores NULL en expresiones como if (a == a), debido al uso de la lógica ternaria en T-SQL. Si se utiliza true o false, se evita esta posible confusión.

Ejemplo

El código siguiente genera la advertencia CS1718.

// CS1718.cs
using System;
public class Tester 
{
    public static void Main() 
    { 
        int i = 0;
        if (i == i) { // CS1718.cs
        //if (true) { 
            i++;
        }
    }
}