Junior — Middle
Jakie są różnice między metodami FirstOrDefault a SingleOrDefault w LINQ?
sobes.tech AI
Odpowiedź od AI
W LINQ metody FirstOrDefault i SingleOrDefault służą do wybierania elementów z sekwencji, ale mają różne semantyki:
FirstOrDefaultzwraca pierwszy element sekwencji, jeśli istnieje, w przeciwnym razie zwraca wartość domyślną (null dla typów referencyjnych).SingleOrDefaultzwraca pojedynczy element sekwencji, jeśli jest dokładnie jeden, w przeciwnym razie:- Jeśli nie ma elementów, zwraca wartość domyślną.
- Jeśli jest więcej niż jeden, rzuca wyjątek
InvalidOperationException.
Przykład:
var numbers = new List<int> { 1, 2, 3 };
var first = numbers.FirstOrDefault(); // zwróci 1
var single = numbers.SingleOrDefault(); // rzuci wyjątek, ponieważ jest więcej niż jeden element
var empty = new List<int>();
var firstEmpty = empty.FirstOrDefault(); // zwróci 0 (domyślnie dla int)
var singleEmpty = empty.SingleOrDefault(); // również zwróci 0
var singleItem = new List<int> { 42 };
var singleValue = singleItem.SingleOrDefault(); // zwróci 42
Podsumowując:
- Używaj
FirstOrDefault, gdy chcesz uzyskać pierwszy element lub null, jeśli nie ma elementów. - Używaj
SingleOrDefault, gdy oczekujesz dokładnie jednego elementu i chcesz otrzymać błąd, jeśli jest ich więcej.