В C# методы FirstOrDefault
и SingleOrDefault
используются для извлечения одного элемента из последовательности, но имеют разные правила работы.
FirstOrDefault
Возвращает первый элемент последовательности или значение по умолчанию, если последовательность пуста.
var numbers = new List<int> { 1, 2, 3 };
var first = numbers.FirstOrDefault(); // 1
var emptyList = new List<int>();
var firstEmpty = emptyList.FirstOrDefault(); // 0 (для int, значение по умолчанию)
- Используется, когда нужен первый элемент.
- Не выбрасывает исключение, если коллекция пуста.
- Может быть эффективнее, если порядок важен.
SingleOrDefault
Возвращает единственный элемент последовательности или default
, если последовательность пуста. Выбрасывает исключение, если в последовательности больше одного элемента.
var numbers = new List<int> { 42 };
var single = numbers.SingleOrDefault(); // 42
var multipleNumbers = new List<int> { 1, 2, 3 };
var error = multipleNumbers.SingleOrDefault(); // Исключение
- Используется, когда ожидается единственный элемент.
- Безопасен для пустых последовательностей, но не для случаев, когда элементов больше одного.
- Может помочь валидации данных.
Сравнение FirstOrDefault
и SingleOrDefault
Метод | Если коллекция пуста | Если один элемент | Если больше одного элемента |
---|---|---|---|
FirstOrDefault | Возвращает default | Возвращает элемент | Возвращает первый элемент |
SingleOrDefault | Возвращает default | Возвращает элемент | Выбрасывает исключение |
Когда использовать
FirstOrDefault
подходит, если важен порядок элементов или допускается наличие нескольких элементов.SingleOrDefault
следует использовать, если гарантируется единственность элемента, например, при поиске по уникальному ключу.
Оба метода полезны, но SingleOrDefault
следует применять, когда критична уникальность элемента, а FirstOrDefault
— когда достаточно первого найденного значения.