Поделиться через


Предупреждение компилятора (уровень 3) CS1718

Обновлен: Ноябрь 2007

Сообщение об ошибке

Сравнение выполнено с той же переменной; действительно следует выполнять такое сравнение?
Comparison made to same variable; did you mean to compare something else?

Если предполагается выполнить сравнение с другим элементом, следует просто исправить оператор.

Однако другая возможность состоит в том, что выполняется тестирование на возвращение значения "true" или "false" и для этого используются такие операторы, как if (a == a) (true) или if (a < a) (false). Удобнее использовать более простые операторы if (true) и if (false). Для этого имеются две причины.

  • Последние операторы проще: всегда удобнее написать ровно столько, сколько предполагается.

  • Использование этих операторов позволяет избежать неоднозначности: в версии C# 2.0 введена новая функция — типы значений, допускающие значение NULL, которые являются аналогом значения null в T-SQL — языке программирования, используемом в SQL Server. Разработчики, знакомые с языком T-SQL, могут усмотреть проблему в использовании типов, допускающих значение NULL, в таких выражениях, как if (a == a), из-за применения троичной логики T-SQL. При использовании значений true или false можно устранить возможную неоднозначность.

Пример

Следующий код вызывает ошибку CS1718.

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