«

»

sie 17

Linq inside (Func, Predicate, Action)

W kolejnym wpisie o linq przedstawię zasadę działania Func, Predicate, Action.
Dla przypomnienia Linq jest połączeniem 5 elementów:

Przyjrzyjmy się najpierw deklaracji tych trzech typów.

Z definicji tych wynika, ze powyższe typy to nic innego jak delegaty. Do każdego z tych typów możemy przypisać metodę statyczna, delegata anonimowego lub wyrażenie lambda.
W tym wpisie podam przykłady jak zastosować pierwsze dwa przypadki. Wyrażenia lambda zostaną omówione w kolejnym wpisie.

Action
Z deklaracji tego typu wynika ze możemy tutaj przypisać metodę, która przyjmuje jeden parametr i nie zwraca żadnego wyniku. Action posiada wiele wersji, różniących się ilością przyjmowanych parametrów aż do 16.

Predicate
Do predicate możemy dopisać metodę przyjmującą jeden parametr i zwracającą bool. Nie istnieje żadne przeładowanie tego typu.

Func
Func podobnie jak action ma wiele przeładowań, różni się tym że ostatni parametr generyczny definiuje typ jaki metoda powinna zwracać.

Ok, ale jak to się ma do Linq, popatrzmy na poniższą deklaracje metody TakeWhile, która wchodzi w skład Linq.

Jak widać jest to metoda, która rozszerza kolekcje i przyjmuje jako parametr Func. Func w tym przypadku ma taką samą deklaracje jak predykat, czyli zwraca bool. Metoda TakeWhile, wykorzystuje yield i dopóki func jest spelniony będzie zwracała kolejny element kolekcji.

Poniższy przykład iteruje po kolekcji, tak długo jak jej elementy są parzyste.

2 Komentarze

  1. Grzesiek

    W tym wpisie podam przykłady jak zastosować pierwsze dwa przypadki wyrażenia lambda zostaną omówione w kolejnym wpisie.

    Nie kumam tego zdania :) Brakuje chyba kropki pomiędzy “przypadki” a “wyrażenia”.

     

     

    1. graf

      Ok poprawione.

Odpowiedz na „grafAnuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć tych znaczników i atrybutów HTMLa: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Current day month ye@r *