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

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

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

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

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

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

```cpp
if (str.Contains("abc"))
```

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

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

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

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