Rzadko zdarza mi się pisać o ficzerach języka C#, a już na pewno nie o takich, które są dostępne od wielu lat. Niemniej, dziś miałem okazję ponownie wykorzystać ciekawą i mniej znaną „odsłonę” enum-ów dostępną poprzez atrybut FlagsAttribute, która być może okaże się dla Ciebie przydatna. Klasyczne użycie typów wyliczeniowych Gdybym z własnych obserwacji miał powiedzieć kiedy typy wyliczeniowe są stosowane, odparłbym „kiedy bool nie wystarcza”. Zazwyczaj bowiem, zaczyna się od właśnie od zmiennej typu ...
Sztuka programowania 2191 dni, 55 minut temu 305 źrodło rozwiń
Wyjątkowo krótki post o tym, jak wykorzystać Enum.ToString() z parametrem.
Sztuka programowania 2250 dni, 1 godzinę, 55 minut temu 112 źrodło rozwiń
Jakiś czas temu kolega pracujący po sąsiedzku podszedł do mnie z informacją, że natknął się na ciekawe zachowanie C#. Chodziło o niechciane wywoływanie przeładowania metody. Co prawda bieżący problem udało nam się rozwiązać, ale sam mechanizm pozostał dla mnie zagadką. Próbowałem szukać rozwiązania w książkach, które wcześniej czytałem, ale dopiero odpowiedź na maila, którego wysłałem do samego Erica Lipperta pozwoliła definitywnie stwierdzić co w trawie piszczy. Dziwne enumy – ot co :)
Sztuka programowania 2254 dni, 1 godzinę, 53 minuty temu 243 źrodło rozwiń
Typy wyliczeniowy są używane do określenia jednej wartości z góry określonego zbioru. Dzięki nim możemy ułatwić sobie tworzenie kodu poprzez nadanie nazwy dla wartości, którą później używamy. Nazwa enuma musi spełniać rygory składni takich języków jak C#, dlatego potrzebujemy mechanizmu, który wyświetli ładny napisu w interfejsie użytkownika. W tym wpisie drogi czytelniku, pokaże Ci jak to zrobić małym nakładem pracy oraz przy okazji wspierać wiele języków. Zob...
New year, new me… Just kidding, no running or yoga plans, but I decided to have a (temporary) break with ‘C# attributes you should know’ series and start with a brand new one – C# facts that somehow surprised me. For the first article, I will show you how (friendly looking, always helpful, good guy...) enum can become an asshole. An asshole who will steal your precious time! One enum value passed to a method, other value received! What’s goin’ on?
Sztuka programowania 2500 dni, 18 godzin, 53 minuty temu 427 źrodło rozwiń
Chcemy rzucić wyjątkiem, gdy mamy przypadek nieobsłużony poprzez case’y. Na przykład gdy pojawiła się nowa wartość enuma Shape. throw EnumGuard.CreateMissingEnumException(nameof(shape), shape);
Sztuka programowania 2548 dni, 1 godzinę, 43 minuty temu 197 źrodło rozwiń
Enum (skrót z ang. enumeration) – typ wyliczeniowy, który pozwala korzystać z nazw zamiast liczb. Deklaracja typu wyliczeniowego pod pewnymi względami przypomina deklarację klasy i posiada: modyfikator dostępu (jeżeli nie podamy to domyślnie zastosowany jest poziom internal)słowo kluczowe: ...
Daj się poznać 2017 2752 dni, 2 godziny, 16 minut temu 64 źrodło rozwiń
Niektórzy w tej chwili lepią pierogi, próbują nie wrócić do domu z pangą, latają za zapomnianym prezentem niczym Arnold za Turbo-Manem lub w ciepłym, przytulnym domku wieszają na choince bombki. Ja z kolei mam cały dzień dla siebie i jego część postanowiłem na napisanie krótkiego posta o tym jak możecie wykorzystać enumy jako flagi i obwiesić nimi swoje obiekty tak bardzo jak tylko chcecie, a żeby zachować choć pozory świątecznej atmosfery zrobię to z małym świątecznym akcentem (takim tycim).
Sztuka programowania 2880 dni, 39 minut temu 214 źrodło rozwiń
Architektura 2944 dni, 18 godzin, 32 minuty temu 277 źrodło rozwiń
Tak IMHO powinien wyglądać dobrze napisany enum: public enum DocumentStatus : byte { Draft = 1, Approved = 2, UnderRevision = 3, Released = 4 } Nie enumerujemy od zera Pozbyć się wartości Undefined Dziedziczyć po byte? Czy nadawać wartości liczbowe wszystkim?
Sztuka programowania 2996 dni, 2 godziny, 31 minut temu 507 źrodło rozwiń
Skoro tworzę system e-commerce, to oczywistym jest, że po złożeniu zamówień coś zaczyna się dziać. Jest to funkcjonalność kluczowa i posunąłbym się do stwierdzenia, że najważniejsze procesy w aplikacjach związanych z e-commerce dzieją się dookoła realizacji wpływających zamówień. Wypadałoby więc coś o tym opowiedzieć.
Daj się poznać 2016 3144 dni, 2 godziny, 5 minut temu 57 źrodło rozwiń
Enumy są fajne. Chociaż dałoby się bez nich żyć, to ułatwiają naprawdę wiele rzeczy. Sęk w tym, że przyjąłem sobie za cel pisanie nazw metod, klas etc. w kodzie tylko i wyłącznie po angielsku, a interfejs na chwilę obecną tworzę w naszym pięknym języku. Jak zatem wyświetlić dla określonej wartości enuma przetłumaczoną (lub kompletnie inną) nazwę w widoku? Niby mamy atrybut [Display(Name = "DisplayName")], ale ... w tym przypadku nie zadziała.
Daj się poznać 2016 3146 dni, 13 minut temu 133 źrodło rozwiń
Zamień bóla na enuma. Dlaczego zamienić? Moim zdaniem czytelniej i jasno sformułowana myśl i łatwiej zrozumieć. Nie chodzi o prosty przypadek, gdzie zamiana polegałaby na zamianie true/false na MyEnum.True/MyEnum.False – nie nie, to byłoby szaleństwem. Ale może od razu do kodu, bo czas nagli dzisiaj. Pierwszy przypadek, wszystko działa jak należy...
Sztuka programowania 3193 dni, 1 godzinę, 24 minuty temu 336 źrodło rozwiń
Załóżmy, że w kodzie zobaczymy enum’a np.:publicenum Colors { Black, Red, Yellow }; Jeśli budujemy framework lub jakąkolwiek bibliotekę należy być świadomym zagrożeń wynikających z wewnętrznej budowy enum’a. Warto zajrzeć do Reflector’a aby przekonać się o tym:.classpublic auto ansi sealed Colors extends [mscorlib]System.Enum { .field publicstatic literal valuetype ConsoleApplication1.Colors Black = int32(0) .field publicstatic literal valuetype ConsoleApplication1.Colors Red = i...
Sztuka programowania 4139 dni, 3 godziny, 53 minuty temu 252 źrodło rozwiń
Gdy MyEnum nie ma wartości -13, to poniższy kod się wykona poprawnie i w enumie będziemy mieli wartość spoza zakresu enuma. var myEnum = (MyEnum) -13; Właściwa treść Mamy enum: enum MyEnum { One = 1 } I chcemy wykonać prostą operacje utworzenia tego enuma, tyle że posiadamy jedynie wartość liczbową (z zewnętrznego źródła danych). Akurat tak pechowo się stało, że mamy nie istn...
Sztuka programowania 4161 dni, 23 godziny, 4 minuty temu 154 źrodło rozwiń
Posted by slanto on Załóżmy, że mamy zdefiniowaną stałą listę dostępnych pół formularza: imię, nazwisko, data urodzenia, płeć. Pola te mogą być wyświetlane w różnych konfiguracjach, np. Imię z nazwiskiem, nazwisko z datą urodzenia lub tylko płeć. Pomijając fakt że z reguły typy wyliczeniowe łamią zasadę Open/Closed principle (http://pl.wikipedia.org/wiki/Zasada_otwarte-zamkni%C4%99te) i zastosowanie ich w tym przypadku może nie jest najlepszym pomysłem, to jednak chcąc pokazać jak zachowuje się typ...
Sztuka programowania 4546 dni, 17 godzin, 34 minuty temu 221 źrodło rozwiń
Często zależy nam by pewien obiekt przechowywał w sobie wartości tylko z określonego zbioru. W takiej sytuacji z pomocą przyjdzie nam typ wyliczeniowy.
Czasami typ ENUM znajduje zastosowanie(czasami ponieważ często ogranicza on modułowość aplikacji). W wielu przypadkach potrzebujemy jednak skojarzyć pewien opis z każdą wartością enum’a. Jako praktyczny scenariusz można wymienić implementację menedżera dźwięków. Dla przykładu w pewnej grze, którą współtworzyłem aby uatrakcyjnić interfejs dla programisty zdefiniowałem sobie typ enumeryczny SOUNDTYPE:publicenum SOUNDTYPE { ROCKETLAUNCH, MACHINEGUN_LAUNCH } Programista zatem chcąc wykorzystać d...
Typy Enum są ładnym rozwiązaniem służącym do definiowania stałych. Zamiast przekazywać nic nie mówiącą liczbę do funkcji, możemy zdefiniować enum i przekazać np. TextAlignment.Left – z pewnością poprawi to czytelność kodu. Czasami jednak chcemy przekazać dwa enumy naraz lub dowolną ich kombinację. W tym celu musimy skorzystać z tzw. flag. Zacznijmy od razu od przykładu:[Flags] enum Days { None =0, Sunday =1, Monday =2, Tuesday =4, Wednesday =8, Thursday =16, Friday =32, Sa...
WPF: Bindowanie Enum'a do ComboBox'akwi 112011 Podczas moich ostatnich zmagań z WPFem trafiłem na ciekawy problem. Chodzi o bindowanie typu Enum do kontrolki ComboBox. Czyli w combo ma pojawiać się lista dostępnych wartości enum'a, a po wybraniu jednej z nich ma uaktualnić się podpięta do comboboxa właściowość ViewModelu. Dodatkowo sprawa komplikuje się gdy nazwy poszczególnych wartości enum'a są niezbyt czytelne dla śmiertelnego użytkownika programu (np. zamiast ładnej opisowej nazwy "To jest pierwsza s...