Блиц по методам IEnumerable: SingleOrDefault vs FirstOrDefault — в чём разница?

FirstOrDefault() возвращает первый элемент последовательности, удовлетворяющий условию, или значение по умолчанию (null для ссылочных типов, 0 для числовых типов), если таких элементов нет.

Короткий ответ

Что ответить на собеседовании

FirstOrDefault() возвращает первый элемент последовательности, удовлетворяющий условию, или значение по умолчанию (null для ссылочных типов, 0 для числовых типов), если таких элементов нет. SingleOrDefault() возвращает единственный элемент последовательности, удовлетворяющий условию, или значение по умолчанию, если таких элементов нет. Если элементов больше одного, выбрасывается исключение InvalidOperationException.

Подробный разбор

Ответ с пояснениями

FirstOrDefault() возвращает первый элемент последовательности, удовлетворяющий условию, или значение по умолчанию (null для ссылочных типов, 0 для числовых типов), если таких элементов нет.
SingleOrDefault() возвращает единственный элемент последовательности, удовлетворяющий условию, или значение по умолчанию, если таких элементов нет. Если элементов больше одного, выбрасывается исключение InvalidOperationException.

Особенность FirstOrDefault SingleOrDefault
Найден 1+ элементов Возвращает первый Выбрасывает исключение
Не найдено элементов Возвращает значение по умолчанию Возвращает значение по умолчанию
Ожидаемое количество Нуль или более Ровно один
// Пример использования FirstOrDefault
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumber = numbers.FirstOrDefault(n => n % 2 == 0); // evenNumber будет 2
var nonExistent = numbers.FirstOrDefault(n => n > 10);   // nonExistent будет 0

// Пример использования SingleOrDefault
var singleNumber = new List<int> { 7 };
var result = singleNumber.SingleOrDefault(); // result будет 7

var emptyList = new List<int>();
var defaultValue = emptyList.SingleOrDefault(); // defaultValue будет 0

var multipleNumbers = new List<int> { 1, 2, 3 };
// var error = multipleNumbers.SingleOrDefault(); // Эта строка выбросит InvalidOperationException

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку