Sobes.tech
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:

  • FirstOrDefault zwraca pierwszy element sekwencji, jeśli istnieje, w przeciwnym razie zwraca wartość domyślną (null dla typów referencyjnych).
  • SingleOrDefault zwraca 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.