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

The analyzer detected that a potentially empty collection has a method call that throws an exception if there are no elements in the collection\.

To better understand this, let's look at the following example:

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

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

An attempt to access the first element from the collection results in 'InvalidOperationException'\. Inside the then branch the collection is empty, because the 'list' has been checked for containing no elements\.

Let's look at the fixed version:

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

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

If we pass an empty collection to the method that doesn't expect this, we can get a similar error\.

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

  CompareFirstWithAll(list);
}

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

The 'ProcessList' method contains a typo, so the empty 'list' collection is passed to the 'CompareFirstWithAll' method\. The 'CompareFirstWithAll' method does not expect to receive an empty collection\.

Let's look at the fixed version:

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

  CompareFirstWithAll(list);
}
```