Предупреждение компилятора (уровень 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++;
}
}
}