Sobes.tech
Junior — Middle

¿Cuáles son las diferencias entre los métodos FirstOrDefault y SingleOrDefault en LINQ?

sobes.tech AI

Respuesta de la IA

En LINQ, los métodos FirstOrDefault y SingleOrDefault se utilizan para seleccionar elementos de una secuencia, pero tienen diferentes semánticas:

  • FirstOrDefault devuelve el primer elemento de la secuencia, si existe, de lo contrario devuelve el valor predeterminado (null para tipos de referencia).
  • SingleOrDefault devuelve el único elemento de la secuencia, si hay exactamente uno, de lo contrario:
    • Si no hay elementos, devuelve el valor predeterminado.
    • Si hay más de uno, lanza una excepción InvalidOperationException.

Ejemplo:

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

var first = numbers.FirstOrDefault(); // devolverá 1
var single = numbers.SingleOrDefault(); // lanzará una excepción, ya que hay más de un elemento

var empty = new List<int>();

var firstEmpty = empty.FirstOrDefault(); // devolverá 0 (predeterminado para int)
var singleEmpty = empty.SingleOrDefault(); // también devolverá 0

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

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

En resumen:

  • Use FirstOrDefault cuando quiera obtener el primer elemento o null si no hay elementos.
  • Use SingleOrDefault cuando espere exactamente un elemento y quiera obtener un error si hay más de uno.