Linq: FirstOrDefault vs First

Linq: FirstOrDefault vs First

Oggi -per cominciare in maniera soft la settimana- vi propongo un tutorial a tema Linq per mostravi la differenza tra FirstOrDefault e First.

Per farlo definiamo una List di string come la seguente.

1
2
3
4
5
6
7
List<string> items = new List<string>()
{
    "Pacman",
    "Mario",
    "Luigi",
    "Pokemon",
};

Come avrete visto e’ davvero semplice, ma quanto basta per l’esempio.

FirstOrDefault

Prima di mostrare l’esempio, voglio riportare la di FirstOrDefault per farvi capire come funziona:

Summary: Returns the first element of a sequence, or a default value if the sequence contains no elements.

Ora possiamo passare al codice.

1
2
3
var result = items
    .Where(x => x.StartsWith(startWith))
    .FirstOrDefault();

Quale sara’ il valore di result secondo voi?

  • Se startWith sara’ P il ritorno sara’ Pacman essendo il primo elemento con la P nella mia lista
  • Se startWith sara’ M / L il ritorno sara’ Mario o Luigi
  • In caso di qualsiasi altra lettera verra’ tornata una stringa vuota.

First

Prima di mostrare l’esempio, voglio riportare la di First per farvi capire come funziona:

Returns the first element of a sequence.

Ora possiamo passare al codice.

1
2
3
var result = items
    .Where(x => x.StartsWith(startWith))
    .First();

Quale sara’ il valore di result secondo voi?

  • Se startWith sara’ P il ritorno sara’ Pacman essendo il primo elemento con la P nella mia lista
  • Se startWith sara’ M / L il ritorno sara’ Mario o Luigi
  • In caso di qualsiasi altra lettera verra’ sollevata una eccezione non potendo prendere l’elemento First in una collezione vuota.

Per la precisione l’Exception sollevata e’ la seguente:

Sequence contains no elements

Quindi ricordatevi di utilizzare First solo ed esclusivamente se siete certi di avere gli elementi nella lista.