Formatowanie TimeSpan.ToString()

29 lipca 2010 07:41 w kategorii: pro
W .NET 4.0 dodano nowe metody TimeSpan.ToString() dające możliwość formatowania czasu podczas wyświetlania. No i fajnie, ale co jeśli póki co utknęliśmy we wcześniejszych wersjach frameworka? Ja w dużej mierze nadal korzystam z 3.5, a po prostu CHCĘ mieć możliwość napisania: 1: string formatted = span.Format("HH:mm:ss"); Co tam owijać w bawełnę... mam:). Pod spodem siedzi sobie extension method: 1: public static string Format(this TimeSpan that, string format) 2: { ... [More]

String.ToEnum<>

3 lutego 2010 06:53 w kategorii: pro
Mając wartość enuma w postaci napisowej, pobraną na ten przykład z bazy, bardzo łatwo jest z powrotem sparsować ją do właściwego dla aplikacji typu: 1: public enum MyEnum 2: { 3: FirstVal, 4: SecondVal 5: } 6: //... 7: (MyEnum)Enum.Parse(typeof(MyEnum), "FirstVal"); Powtarzanie tego w kodzie jest jednak dość męczące. I po raz kolejny świetny mechanizm Extension methods przychodzi na ratunek: 1: public static class StringExtensions 2... [More]

Ostatnio natknąłem się na coś, co... blew my mind (wydymało mi umysł?). Bardzo krótko wspomniał o tym Bartek Pampuch na ostatnim MTS i utkwiło mi w pamięci, ale dopiero kilka dni temu niechcący przyjrzałem się "owemu czemuś" bliżej. Owo cuś to biblioteka Reactive Extensions (Rx) implementująca założenia programowania reaktywnego by Microsoft. Nie będę zagłębiał się w teorię czy omawianie szczegółów, ponieważ sam dopiero zacząłem skrobać powierzchnię tej megazajebistej koncepcji i post... [More]

W ramach utrzymywania pozorów dbania o tężyznę fizyczną udaję się dwa razy w tygodniu na basen, na 7 rano. Jakież było dziś moje zaskoczenie, gdy po wykonaniu założonego planu wodnego przeniosłem swoje ciało z miniakwenu pod natryski i zastałem tam babę z mopem szorującą ściany pryszniców! Czy taka czynność nie powinna być załatwiona PRZED otwarciem pływalni? "przecież niektórzy pływacy mają takie tam zwyczaje, że pod prysznic się udając eksponują swoje faje; czy nie budzi konsternac... [More]

Podczas przygotowywania kolejnego posta z serii "Samples" zaimplementowało mi się coś bardzo fajnego, co chyba zasługuje na osobną notkę. Oto zatem kolejna krótka demonstracja potęgi połączonych mechanizmów C# (v. 2 i 3). Scenariusz: mamy formatkę wypełnioną panelami, groupboxami, layoutami i wszystkimi innymi kontenerami jakie tam jeszcze Bozia z Redmond na toolbox wrzuciła. Nachodzi nas chętka na wykonanie pewnej operacji na WSZYSTKICH kontrolkach zawartych w oknie, niezależnie od tego gdzie ... [More]

Oto trzy przykładowe scenariusze, które wykorzystują moc daną nam przez Andersa Hejlsberga i spółkę:1. Sprawdzenie, czy wszystkie textboxy są wypełnionePrzykładzik banalny i w wielu sytuacjach niepraktyczny, ale ładnie prezentujący wygodę pisania kodu "the 3.0 way".Stary kod: 1: private bool AreAllTextboxesFilledOldWay() 2: { 3: foreach (Control c in this.Controls) 4: { 5: TextBox tb = c as TextBox; 6: if (tb == null) 7: continue; 8: 9: if (tb.Text == string.Empty) ... [More]

Oto praktyczny przykład użycia wyrażeń lambda i metod rozszerzających, który lekko i prymitywnie "ociera się" o programowanie aspektowe i imituje jego podstawowe założenia:Najpierw tworzymy klasę zawierającą roszerzenia dla windowsowych formatek (ewentualnie naszej klasy bazowej): 1: public static class FormExtensions 2: { 3: public static void SetWaitingCursorFor(this Form instance, Action operation) 4: { 5: Cursor currentCursor = instance.Cursor; 6: instance... [More]

Extension methods - explained

29 lutego 2008 12:42 w kategorii: pro
W .NET 3.5 (a konkretniej - C# 3.0 oraz VB 9.0) pojawił się mechanizm "extension methods". Cel przyświecający jego autorom był zaiste godny uwagi: umożliwienie dodania nowych funkcjonalności do już istniejących, skompilowanych klas. Jedna z kilku "Ruby-like features" wprowadzonych do świata .NET. Przydatność takiego rozwiązania trudno przecenić - w ten sposób rozszerzono m.in. klasy już istniejące w .NET 2.0 (*).Rodzi się jednak pytanie: w jaki sposób osiągnięto ów cel, skoro wiadomo, że CLR poz... [More]