# V3122. Uppercase (lowercase) string is compared with a different lowercase (uppercase) string.

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

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

    void Some(string s)
    {
      if (s.ToUpper() == "abcde")
      {
        ....
      }
    }

После того, как значение переменной 's' приводится к верхнему регистру, результат сравнивается со строкой, все символы которой в нижнем регистре. Так как такое сравнение будет всегда ложным, фрагмент кода содержит ошибку, которая может быть исправлена следующим образом:

    void Some(string s)
    {
      if (s.ToLower() == "abcde")
      {
        ....
      }
    }

Рассмотрим еще один пример:

    void Some()
    {
      string s = "abcde";
      ....
      if (s.Contains("AbCdE"))
      {
        ....
      }
    }

Переменная 's' содержит символы только в нижнем регистре. При этом, для данной строки производится попытка поиска ее подстроки, содержащей символы в смешанном регистре. Очевидно, что в данном случае результатом работы метода 'Contains' всегда будет ложь. Приведенный фрагмент кода также содержит ошибку.

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

CWE-570

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