Sobes.tech
Junior — Middle

Quali sono le differenze tra i metodi FirstOrDefault e SingleOrDefault in LINQ?

sobes.tech AI

Risposta dell'AI

In LINQ, i metodi FirstOrDefault e SingleOrDefault vengono utilizzati per selezionare elementi da una sequenza, ma hanno semantiche diverse:

  • FirstOrDefault restituisce il primo elemento della sequenza, se presente, altrimenti restituisce il valore predefinito (null per tipi di riferimento).
  • SingleOrDefault restituisce l'unico elemento della sequenza, se ce n'è esattamente uno, altrimenti:
    • Se non ci sono elementi, restituisce il valore predefinito.
    • Se ce ne sono più di uno, lancia un'eccezione InvalidOperationException.

Esempio:

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

var first = numbers.FirstOrDefault(); // ritorna 1
var single = numbers.SingleOrDefault(); // lancerà un'eccezione, poiché ci sono più di un elemento

var empty = new List<int>();

var firstEmpty = empty.FirstOrDefault(); // ritorna 0 (predefinito per int)
var singleEmpty = empty.SingleOrDefault(); // ritorna anche 0

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

var singleValue = singleItem.SingleOrDefault(); // ritorna 42

In breve:

  • Usa FirstOrDefault quando vuoi ottenere il primo elemento o null se non ci sono elementi.
  • Usa SingleOrDefault quando ti aspetti esattamente un elemento e vuoi ottenere un errore se ce ne sono più di uno.