Wykorzystanie wyrażeń lambda w naszych klasach

Wyrażenia lambda jest to nowa konstrukcja wprowadzona do C# 3.0 pozwalająca w łatwy i przejrzysty sposób na "szybko" zdefiniować jakąś funkcję. W tej notce napiszę jak można je użyć do definiowan

Nadrzędnym typem każdego wyrażenia lambda jest typ Func<T1, T2, T3, T4, TResult> gdzie T1-T4 są typami argumentów, a TResult typem wyniku. Nie jesteśmy oczywiście przywiązani do czterech parametrów wejściowych, gdyż zostały zdefiniowane typy od 0 do 4 argumentowe (zmienia się liczba wystąpień TX). TResult jest natomiast parametrem obowiązkowym.

W poniższym przykładzie zdefiniuję metodę w klasie Matrix, która jako argument będzie otrzymywała wyrażenie lambda (funkcję) i wykona ją dla każdego z elementów macierzy. Przechodząc do praktyki będzie to wyglądało tak:

  1. public void DoForAllElements(Func< T , T> function)
  2. {
  3.  
  4. for (int i = 0; i < N; i++)
  5. {
  6. for (int j = 0; j < M; j++)
  7. {
  8. this[i, j] = function(this[i, j]);
  9. }
  10. }
  11. }
  12.  

Wykorzystać ją możemy w sposób następujący:

  1. var A = new Matrix< Double , DoubleCalculator>();
  2. A.DoForAllElements( x => Math.Sqrt(x) );
  3.  

Prawda, że proste? :)