# V3155. The expression is incorrect or it can be simplified.

Анализатор обнаружил подозрительное выражение, результат которого всегда будет равен одному из его операндов. Такие выражения могут являются избыточными по задумке автора, и должны передать какую-то идею тем, кто будет сопровождать код. А возможно это просто ошибка.

Рассмотрим простой вариант, как может выглядеть ошибка:

`var a = 11 - b + c * 1;`

Переменная 'c' умножается на '1', что является избыточным. Возможно, была допущена опечатка и вместо 1 должно быть написано, например 10:

`var a = 11 - b + c * 10;`

Давайте теперь рассмотрим случай из реального проекта, когда избыточность была добавлена сознательно, но неудачно:

`detail.Discount = i * 1 / 4M;`

Программист имел в виду, что переменная 'i' должна умножаться на значение одна четвёртая. Да, можно было сразу написать 0.25, но 1/4 лучше может передавать смысл алгоритма.

Однако, получилось не очень удачно. В начале выполняется умножение переменной 'i' на 1 и только затем происходит деление. Да, результат получится один и тот же. Но такой код может сбить с толку человека. И по этой причине он не нравится и анализатору, который выдаст здесь предупреждение.

Чтобы код стал более читаемым, а анализатор перестал выдавать предупреждение, лучше добавить скобки:

`detail.Discount = i * (1 / 4M);`

Еще один пример из реального проекта:

```
public virtual ValueBuffer GetIncludeValueBuffer(int queryIndex)
{
return queryIndex == 0
? _activeQueries[_activeIncludeQueryOffset + queryIndex].Current
: _activeIncludeQueries[queryIndex - 1].Current;
}
```

В данном случае '_activeIncludeQueryOffset' всегда будет складываться с нулем, так как выше находится проверка 'queryIndex == 0'. Скорее всего это не ошибка, но код можно упростить:

```
public virtual ValueBuffer GetIncludeValueBuffer(int queryIndex)
{
return queryIndex == 0
? _activeQueries[_activeIncludeQueryOffset].Current
: _activeIncludeQueries[queryIndex - 1].Current;
}
```

**Примечание.** Анализатор не ругается на случаи, когда рядом с подозрительным выражением находится подобное ему выражение. Пример:

```
A[i+0]=1;
A[i+1]=10;
A[i+2]=100;
A[i+3]=1000;
A[i+4]=10000;
```

Выражение 'i + 0' является избыточным. Но рядом располагаются подобные выражения вида 'i + литерал'. Поэтому можно сделать вывод, что сложение с 0 было сделано сознательно, для соблюдения общего стиля написания.

Данная диагностика классифицируется как: