Анализатор обнаружил потенциальную ошибку, связанную с тем, что одна или несколько ветвей оператора '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; }
Данная диагностика классифицируется как: