﻿# V3184\. The argument's value is greater than the size of the collection\. Passing the value into the 'Foo' method will result in an exception\.

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

Чтобы лучше разобраться в проблеме, рассмотрим пример:

```cpp
public static void Foo()
{
  List<string> list = new List<string>(20) { "0", "1", "2" };
  list.RemoveAt(list.Count);
}
```

При попытке удалить элемент будет выброшено исключение\. Метод 'RemoveAt' выбрасывает исключение, если первый аргумент больше или равен количеству элементов коллекции\.

Исправленный вариант:

```cpp
public static void Foo()
{
  List<string> list = new List<string>(20) { "0", "1", "2" };
  list.RemoveAt(list.Count - 1);
}
```

Рассмотрим более сложный пример с ошибкой:

```cpp
public static void ProcessList()
{
  List<string> list = new List<string>(20) { "0", "1", "2" };
  string str = GetStringOrNull(list, list.Count); // <=
}

public static string GetStringOrNull(List<string> list, int index)
{
  if (index > list.Count)
    return null;

  return list.ElementAt(index);
}
```

Коллекция 'list' передаётся в метод 'GetStringOrNull', который содержит ошибку в условии оператора 'if'\. При подобных аргументах метод должен вернуть 'null', но из\-за ошибки выбрасывает исключение\.

Исправленный вариант:

```cpp
public static void ProcessList()
{
  List<string> list = new List<string>(20) { "0", "1", "2" };
  string str = GetStringOrNull(list, list.Count);
}

public static string GetStringOrNull(List<string> list, int index)
{
  if (index >= list.Count)
    return null;

  return list.ElementAt(index);
}
```