# V3179. Calling element access method for potentially empty collection may result in exception.

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

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

    public static bool ComparisonWithFirst(List<string> list,
                                           string strForComparison)
    {
      string itemForComparison = null;

      if (list != null && !list.Any())
      {
        itemForComparison = list.First();
      }
      ....
    }

При попытке получить первый элемент из коллекции будет выброшено исключение типа 'InvalidOperationException'. Внутри then-ветви коллекция будет пустой, так как выполняется проверка, что в 'list' нет элементов.

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

    public static bool ComparisonWithFirst(List<string> list,
                                           string strForComparison)
    {
      string itemForComparison = null;

      if (list != null && list.Any())
      {
        itemForComparison = list.First();
      }
      ....
    }

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

    public static void ProcessList(List<string> list)
    {
      if (list.Any())
        return;

      CompareFirstWithAll(list);
    }

    public static void CompareFirstWithAll(List<string> list)
    {
      string itemForComparison = list.First();
      ....
    }

Из-за опечатки в методе 'ProcessList' коллекция 'list' передаётся в метод 'CompareFirstWithAll' пустой. Метод 'CompareFirstWithAll' не ожидает передачи в него пустой коллекции.

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

    public static void ProcessList(List<string> list)
    {
      if (!list.Any())
        return;

      CompareFirstWithAll(list);
    }

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

CWE-628

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