Sobes.tech
Junior — Middle

Quais são as diferenças entre os métodos FirstOrDefault e SingleOrDefault no LINQ?

sobes.tech IA

Resposta da IA

No LINQ, os métodos FirstOrDefault e SingleOrDefault são usados para selecionar elementos de uma sequência, mas têm semânticas diferentes:

  • FirstOrDefault devolve o primeiro elemento da sequência, se existir, caso contrário devolve o valor padrão (null para tipos de referência).
  • SingleOrDefault devolve o único elemento da sequência, se houver exatamente um, caso contrário:
    • Se não houver elementos, devolve o valor padrão.
    • Se houver mais de um, lança uma exceção InvalidOperationException.

Exemplo:

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

var first = numbers.FirstOrDefault(); // retornará 1
var single = numbers.SingleOrDefault(); // lançará uma exceção, pois há mais de um elemento

var empty = new List<int>();

var firstEmpty = empty.FirstOrDefault(); // retornará 0 (padrão para int)
var singleEmpty = empty.SingleOrDefault(); // também retornará 0

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

var singleValue = singleItem.SingleOrDefault(); // retornará 42

Resumindo:

  • Use FirstOrDefault quando quiser obter o primeiro elemento ou null se não houver elementos.
  • Use SingleOrDefault quando esperar exatamente um elemento e quiser obter um erro se houver mais de um.