# V3199. The index from end operator is used with the value that is less than or equal to zero. Collection index will be out of bounds.

Анализатор обнаружил доступ к элементу коллекции с помощью оператора '^' со значением, которое меньше или равно 0. Это приводит к исключению типа 'IndexOutOfRangeException'.

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

    T GetLastItem<T>(T[] array)
    {
        return array[^0];
    }

Оператор '^' указывает, что индекс учитывается с конца последовательности. Может быть не очевидно, что '^0' равносильно 'array.Length'. При попытке получения последнего элемента коллекции с помощью '^0' будет выброшено исключение, как и при использовании 'array[array.Length]'.

Исправленный код:

    T GetLastItem<T>(T[] array)
    {
        return array[^1];
    }

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

CWE-125 CWE-787