Omów metody Single, SingleOrDefault, First, FirstOrDefault. Podaj różnice między nimi.Pytanie, być może dla jednych proste, dla innych już niekoniecznie. O ile FirstOrDefault jest bardzo często wykorzystywane w kodzie o tyle z Single-* może być już różnie.
Zobaczmy na początek na metody Single or SingleOrDefault. Metoda ta oczekuje, że kolekcja będzie zawierała tylko jeden element.
Do rozważenie mamy 4 przypadki:
- kolekcja jest nullem
List<string> collection = null; var singleOrDefault = collection.SingleOrDefault(); var single = collection.Single();
W obu przypadkach zostanie rzucony wyjątek System.ArgumentNullException
- kolekcja zawiera 1 element
var collection = new List<string> {"Value1"}; var singleOrDefault = collection.SingleOrDefault(); var single = collection.Single();
W obu przypadkach zostanie zwrócony pojedynczą wartość Value1
- kolekcja zawiera więcej niż 1 element
var collection = new List<string> {"Value1", "Value2"}; var singleOrDefault = collection.SingleOrDefault(); var single = collection.Single();
W obu przypadkach otrzymamy błąd System.InvalidOperationException: 'Sequence contains more than one element'.
- kolekcja jest pusta
var collection = new List<string>(); var singleOrDefault = collection.SingleOrDefault(); var single = collection.Single();
Tu już robi się ciekawiej. W przypadku kolekcji pustej metoda Single zwróci wyjątek: System.InvalidOperationException: 'Sequence contains no elements' a metoda SingleOrDefault() - wartość domyślną:
Drugą grupę metod stanowi First i FirstOrDefault. Tu już sprawa wydaje się znacznie łatwiejsza, gdyż są to metody znacznie częściej goszczące w naszym kodzie.
Jak poprzednio rozpatrzmy 4 przypadki:
- kolekcja jest nullem
List<string> collection = null; var firstOrDefault = collection.FirstOrDefault(); var first = collection.First();
W obu przypadkach zostanie rzucony wyjątek System.ArgumentNullException
- kolekcja zawiera 1 element
var collection = new List<string> { "Value1" }; var firstOrDefault = collection.FirstOrDefault(); var first = collection.First();
W obu przypadkach zostanie zwrócony pojedynczą wartość Value1
- kolekcja zawiera więcej niż 1 element
var collection = new List<string> { "Value1", "Value2" }; var firstOrDefault = collection.FirstOrDefault(); var first = collection.First();
W obu przypadkach zostanie zwrócony pojedynczą wartość Value1 - chcemy pobrać pierwszy element, jeżeli kolekcja zawiera więcej i tak zawsze otrzymamy pierwszy.
- kolekcja jest pusta
var collection = new List<string>(); var firstOrDefault = collection.FirstOrDefault(); var first = collection.First();
W tym przypadku dla metody FirstOrDefault zostanie zwrócony null, gdyż to wartość domyślna jeżeli kolekcja jest pusta. Metoda First rzuci wyjątkiem System.InvalidOperationException: 'Sequence contains no elements'
Brak komentarzy:
Prześlij komentarz