# V3202. Unreachable code detected. The 'case' value is out of the range of the match expression.

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

Рассмотрим синтетический пример:

    switch (random.Next(0, 3))
    {
      case 0:
      case 1:
        Console.WriteLine("1");
        break;
      case 2:
        Console.WriteLine("2");
        break;
      case 3:                     // <=
        Console.WriteLine("3");
        break;
      default:
        break;
    }

В данном случае код в 'case 3' никогда не выполнится. Дело в том, что в 'random.Next(0, 3)' верхняя граница не входит в возвращаемый диапазон значений. В результате выражение в 'switch' никогда не примет значение 3, и 'case 3' не выполнится.

Исправить эту ошибку можно двумя способами. В первом варианте можно просто избавиться от мертвого кода, удалив секцию 'case 3', которая не входит в диапазон 'random.Next(0, 3)':

    switch (random.Next(0, 3))
    {
      case 0:
      case 1:
        Console.WriteLine("1");
        break;

      case 2:
        Console.WriteLine("2");
        break;
    }

Либо же можно увеличить верхнюю границу в методе 'next' - 'random.Next(0, 4)':

    switch (random.Next(0, 4))
    {
      case 0:
      case 1:
        Console.WriteLine("1");
        break;

      case 2:
        Console.WriteLine("2");
        break;

      case 3:
        Console.WriteLine("3");
        break;
    }

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

CWE-561

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