Sobes.tech
Назад к вопросам
Junior — Middle
70

Какие отличия между методами FirstOrDefault и SingleOrDefault в LINQ?

Ответ от нейросети

sobes.tech AI

В LINQ методы FirstOrDefault и SingleOrDefault используются для выборки элементов из последовательности, но имеют разные семантики:

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

Пример:

var numbers = new List<int> { 1, 2, 3 };

var first = numbers.FirstOrDefault(); // вернет 1
var single = numbers.SingleOrDefault(); // выбросит исключение, т.к. элементов больше одного

var empty = new List<int>();

var firstEmpty = empty.FirstOrDefault(); // вернет 0 (default для int)
var singleEmpty = empty.SingleOrDefault(); // тоже вернет 0

var singleItem = new List<int> { 42 };

var singleValue = singleItem.SingleOrDefault(); // вернет 42

Итого:

  • Используйте FirstOrDefault, когда хотите получить первый элемент или null, если элементов нет.
  • Используйте SingleOrDefault, когда ожидаете ровно один элемент и хотите получить ошибку, если элементов больше одного.