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);
}
Данная диагностика классифицируется как: