Прочитать на английском

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


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

Сравнение выполнено с той же переменной. Действительно следует выполнять такое сравнение?

Если вы хотите сравнить что-то другое, исправьте инструкцию.

Однако может быть и так, что вы выполняли проверку на возвращение значения 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++;  
        }  
    }  
}