Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V3053. An excessive expression....
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V3053. An excessive expression. Examine the substrings "abc" and "abcd".

01 Фев 2016

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

Рассмотрим пример:

if (str.Contains("abc") || str.Contains("abcd"))

В случае если подстрока "abc" будет найдена, то дальнейшая проверка не будет выполняться. Если подстрока "abc" не будет найдена, то и поиск более длинной подстроки "abcd" не имеет смысла.

Для исправления ошибки необходимо проверить правильность подстрок или убрать из кода лишние проверки. Пример корректного варианта:

if (str.Contains("abc"))

Другой пример:

if (str.Contains("abc"))
  Foo1();
else if (str.Contains("abcd"))
  Foo2();

В данном случае метод Foo2() никогда не будет вызван. Устранить ошибку можно путем замены порядка проверки. То есть сначала следует искать более длинную подстроку, а потом более короткую:

if (str.Contains("abcd"))
  Foo2();
else if (str.Contains("abc"))
  Foo1();

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3053.