Jedna lambda, dwie możliwości W jednym z poprzednich wpisów wspominałem, że .NET nie wie nic o wyrażeniach lambda. Pisałem, że kompilator C# prawie zawsze zamienia je na instancyjne metody. No właśnie, co się dzieje w pozostałych przypadkach? Drugim przypadkiem jest tworzenie expression trees. ‚Lambdy’ zamieniają się w ‚drzewa’, kiedy ich deklaracje opakujemy w słowo kluczowe Expression:Expression
Daj się poznać 2017 2776 dni, 16 godzin, 13 minut temu 80 źrodło rozwiń
W tym wpisie chciałbym przedstawić sposób działania delegatów oraz wyjaśnić korzystanie z wyrażeń lambda w języku C#. Zanim zajmę się wyrażeniami lambda, zacznę od przedstawiania delegatów. Jeżeli znasz choć trochę idee wskaźników w języku C lub C++ to wiesz, że służą one do przechowywania adresu pewnego obszaru pamięci. Podobnie możemy postrzegać delegaty – są pewnego rodzaju wskaźnikami na metodę lub grupę metod. To czy daną metodę możemy przypisać do delegatu zależy od jego typu zwrotnego...
Hi guys! Welcome to the second part of notes from the BoilingFrogs conference. I have so many interesting topics to write about, but firstly I wanted to finish this little series, as I don’t wanna waste that notes that I took during lectures. In the last conference post I wrote about first two lectures that I found really great. I saved the juiciest one for today. Serverless architecture – also a hot topic, one that I was really interested in lately, just to c...
Architektura 2837 dni, 5 godzin, 15 minut temu 85 źrodło rozwiń
Dzisiaj kolejna nowa funkcjonalność w c#. Zacznijmy od przykładu:publicclass Point { publicdouble Dist => Math.Sqrt(X * X + Y * Y); publicdouble X; publicdouble Y; } X oraz Y to zwykłe pola (tak nie powinno się ich definiować jako publiczne ale to tylko przykład). Następnie Dist to dziwny twór… Wiemy, że mamy tam wyrażenie lambda, które wywołuje Math.Sqrt i robi obliczenia. Zobaczymy jak możemy z tego skorzystać w kodzie:Point point =new Point(); point.X =5; point.Y =6; double dist = point...
10.18.13 by MJ Short post about searching List. There are 3 most popular methods: foreach, delegate and lambda expression. I will introduce all of them. Let’s say that we have List which stores cars. Car has 2 properties – brand and model. var listOfCars = new List { new Car() { Brand = "Car1Brand", Model = "Car1Model" }, new Car() { Brand = "Car2Brand", Model = "Car2Model" }, new Car() { Brand = "Car3Brand", Model = "Car3Model"...
Sztuka programowania 4072 dni, 6 godzin, 36 minut temu 120 źrodło rozwiń
Wyrażenia lambda są łatwe w użyciu, ale jak to bywa z takimi ułatwieniami również nieświadomie można spowodować poważne problemy. Przykład:class SampleClass { } class Factory { private Type _type =typeof (SampleClass); public Func
Sztuka programowania 4435 dni, 3 godziny, 55 minut temu 144 źrodło rozwiń
Co poniższy kod zwróci na ekranie? Spodziewać się można 0,1,2. Jednak na ekranie ujrzymy 5,5,5. Dlaczego?
Interfejs INotifyPropertyChangedPropertyChanged znany jest prawdopodobnie każdemu programiście C#. Interfejs ten zawiera jedynie jedno zdarzenie public event PropertyChangedEventHandler PropertyChanged; które powinniśmy odpalić w momencie gdy dana właściwość zostanie przez nas zmieniona. Dzięki temu dowolny obiekt, który będzie nasłuchiwał zmian danej właściwości zostanie o tym poinformowany. Przykładowa klasa implementująca ten interfejs może wyglądać w następujący sposób: public class ViewMode...
Autor: Dotychczas myślałem, że LINQ dopuszcza stosowanie zapytań tylko i wyłącznie w formie SQL-podobnej, tzn: view sourceprint?1 var zmienna = from x in y select x; Doczytałem dzisiaj jednak, że jest to jedna z dwóch metod umożliwiających konstruowanie zapytań do bazy danych. Ta znana mi metoda to tzw. składnia zapytań. Druga, którą kojarzyłem, ale nie wiedziałem, że jest alternatywą, to tzw. składnia lambda. Żeby nie zanudzać teorią przedstawiam poniżej przykład tego samego zapytania napisanego na d...
Bazy danych i XML 5230 dni, 16 godzin, 52 minuty temu 252 źrodło rozwiń
W części pierwszej poznaliśmy założenia zadania. Tym razem zaczniemy budować implementację. W tym miejscu wspomnę, że w przeważającej większości zabaw z wyrażeniami lambda oraz składnią imitującą język naturalny warto najpierw napisać przykładowe użycie kodu (jak to zrobiliśmy wcześniej), a dopiero później próbować zrealizować pomysł. Korzystamy z funkcji rozszerzających, więc pierwszą czynnością jest przygotowanie statycznej klasy, w której zamieścimy implementację - nie ma tu nic odkrywczego: publi...
Jednym z założeń wzorca Design by contract jest sprawdzanie poprawności przekazanych do funkcji argumentów. Zapewne w wielu miejscach Twojego kodu możesz spotkać konstrukcje sprawdzające czy przekazane argumenty nie są równe null - praktycznie identyczne w każdej funkcji. W serii artykułów zostanie przedstawiony jeden ze sposobów unifikacji i uniknięcia powtórzeń.