In my last post, we got familiar with the internals of string switch statement in C#. Today, we are going to deeply understand another language feature – iterators. Iterators in C# Despite the fact that iterators (using yield keyword) were introduced back in C# 2.0, many folks are still confused how they work. Honestly, I’m not surprised at all, because to me this mechanism was a mystery for a long time. Of course, we have to clearly distinguish two things here:How do...
Sztuka programowania 2512 dni, 5 godzin, 35 minut temu 152 źrodło rozwiń
Leniwy czy opóźniony? Po ostatnim wpisie pojawiły się pytania, dlaczego użyłem nazwy Deferred Execution a nie Lazy Loading. W tym wpisie wyjaśnię jak ja widzę te dwa koncepty. Aby zobrazować przedstawione zagadnienie, przygotowałem program, który pomoże pokazać co i kiedy się dzieje. Cały kod można znaleźć pod tym linkiem. Przedstawiłem tam trzy koncepty tworzenia danych. Jeden normalny, drugi na bazie Lazy Loading i trzeci, o którym mówiłem w poprzed...
Daj się poznać 2017 2782 dni, 20 godzin, 40 minut temu 186 źrodło rozwiń
How many programmers you know use ‘yield‘? Seriously, if you have an occasion, ask them – I’m afraid you will notice a strange thing – everybody heard about it but (almost) nobody (including me) uses it. Time to change it! Why? Because ‘yield‘ was introduced in C# 2.0 (yeeeah, it’s that old!) and can help you get rid of some of the ‘temp’ collections in your code and, what’s more important, it may prevent you from System.OutOfMemory exception.
Daj się poznać 2017 2812 dni, 12 godzin, 44 minuty temu 206 źrodło rozwiń
Słowo kluczowe yield – obecne w języku C# od dawien dawna – w prosty sposób może przyczynić się do poprawy wydajności naszego kodu. Jak działa? Gdzie go używać? Jak może przyczynić się do poprawy działania aplikacji? Przekonajmy się...
Sztuka programowania 3237 dni, 6 godzin, 56 minut temu 467 źrodło rozwiń
W tym wpisie zajmę się omówieniem polecenia yield, udostępnionego w wersji 2.0 języka C#. Do czego służy ta instrukcja? Dzięki niej możemy tworzyć tzw. leniwe kolekcje, do których poszczególne elementy dodawane są dopiero w momencie zgłoszenia na nie zapotrzebowania. Żeby zaprezentować działanie polecenia yield, najpierw zobaczmy standardowy sposób tworzenia kolekcji.
Słowo kluczowe yield jest dość często wykorzystywane w c#. W przeciwieństwie do poprzednich konstrukcji, które opisywałem (np. volatile), nie trudno znaleźć zastosowanie praktycznie w projekcie. Zacznijmy może od razu od przykładu:foreach (int value in GetNumbers(5,7)) { MessageBox.Show(value.ToString()); } // ------------------private IEnumerable
Kilka tygodni temu miałem za zadanie wygenerować na stronie tabelkę dla pewnych danych, z zastrzeżeniem, że ostatnie wiersze powinny zawierać sumę i średnią wszystkich komórek powyżej. Nic nadzwyczajnego. Jednak pojawił się jeden problem: źródłowa tabela takich danych nie posiadała. Oczywiste było, że takie wymaganie pojawi się zaraz w kolejnych miejscach. Postanowiłem więc poświęcić kilka minut na zamknięcie takiej funkcjonalności w osobnej metodzie. Dość naturalnym wydało mi się stworzenie odpowiednik...
Czy zastanawialiście się kiedyś jak działa słowo kluczowe yield? Jeśli ktoś nie kojarzy tej konstrukcji to w telegraficznym skrócie pozwala ona (między innymi) w bardzo łatwy sposób zaimplementować interfejs IEnumerable. Interfejs ten wymagana dostarczenia tylko jednej metody, która powinna zwrócić instancję klasy implementującej IEnumerator. Zaimplementowanie tego interfejsu nie powinno przysporzyć znacznych trudności ale wymaga już trochę większego nakładu pracy. Przykładowe, uproszczone użycie yield ...