Ejla!
Mene pa zanima o možnosti set-a oziroma union-a, intersecta nad enumeracijo.
Mas primer:
Potem lahko naredim takole:
TestType test = (TestType)USAGE;
Zanima me, kaj on vzame, ko naredim zgornji primer? TEST1 ali TEST2? Kako naj vem, da sem dobil recimo TEST2. Moram še posebej preverjat? Al to naredim prej v kodi? Recimo, da naredim nekje v kodi Union.USAGE=TestType.TEST2.....
Druga finta, ki me zanima, je pa, kakšna je razlika med Enum.Parse pa med EnumConverter razredom?
Mene pa zanima o možnosti set-a oziroma union-a, intersecta nad enumeracijo.
Mas primer:
enum TestType
{
TEST1,
TEST2
}
enum Union
{
USAGE=TEST1 | TEST2,
NON_USAGE=TEST2
}
Potem lahko naredim takole:
TestType test = (TestType)USAGE;
Zanima me, kaj on vzame, ko naredim zgornji primer? TEST1 ali TEST2? Kako naj vem, da sem dobil recimo TEST2. Moram še posebej preverjat? Al to naredim prej v kodi? Recimo, da naredim nekje v kodi Union.USAGE=TestType.TEST2.....
Druga finta, ki me zanima, je pa, kakšna je razlika med Enum.Parse pa med EnumConverter razredom?
Avtor: bojanv, objavljeno na portalu SloDug.si (Arhiv)
AndrejT - četrtek, 03. avgust 2006
Deklaracija: [Flags]public enum Cats{ Black = 1, White = 2, Orange = 4} Testi: Cats cat = Cats.Black | Cats.White; // OK - unionCats cat2 = (Cats)3; // OK, casting iz numerične reprezentacijeCats cat3 = (Cats)Enum.Parse(typeof(Cats), "Black, White"); // OK, casting iz opisne reprezentacije Cats cat4 = (Cats)Enum.Parse(typeof(Cats), "3"); // OK, podobno kot cat2+cat3 - numerična reprezentacija, vendar podana kot stringCats cat5 = (Cats)"Black, White"; // NOK, se niti ne prevede Zaključek - direktni casting dela z bazičnem tipom (int oz. nek numerični tip), metoda Parse je bolj univerzalna, saj obvlada tako numerične, kot tudi opisne vrednosti (oboje vključno z zaobjetimi-union vrednostmi) EnumConverter obvlada podobno kot Enum.Parse: Cats cat6 = (Cats)TypeDescriptor.GetConverter(typeof(Cats)).ConvertFrom("Black, White");Cats cat7 = (Cats)TypeDescriptor.GetConverter(typeof(Cats)).ConvertFrom("3"); , ker pa gre tu za TypeConverter, zna verjetno še kakšen trik več (pretvorbe med različnimi interpretacijami Enumov), če pa želiš, ga lahko podobnih trikov naučiš tudi sam (z razširitvijo). Andrej
bojanv - sreda, 02. avgust 2006
Kul, thnx...ena kratica več ...
ExAmigan - sreda, 02. avgust 2006
Hope This Helps?
bojanv - torek, 01. avgust 2006
Flage poznam, sem že delal z njimi. Zgornji primer je bil le za ilustracijo. Zanimalo me je, če lahko grupiraš glede na tip. Zdaj, ko pomislim, je zgornji primer logičen. A kaj češ, če nekdo ne napiše in zadeve ne premisliš, ne vidišHvala MihaM za lep primer uporabe. Kaj pomeni HTH? Zanima me še, kdaj je kaj boljše uporabit? Ali direkten cast (da dobiš Enum), torej (TestType)nekoStevilo, ali Enum.Parse (generična zadeva tukaj) z typeof ali pa EnumConverter? Z zadnjim konverterjem se nisem delal pa me zanima, če se ga splača uporabljat? Ma kdo izkušnje s tem?
MihaM - torek, 01. avgust 2006
Enumi so interno vedno predstavljeni kot cele številke in seveda lahko poljubno delaš casting, le pozoren moraš biti na možnost, da vrednost ne ustreza enumu. Za tvoj primer velja pa tole:enum TestType{ TEST1, // = 0 TEST2 // = 1}enum Union{ USAGE=TestType.TEST1 | TestType.TEST2, // = 0|1 = 1 NON_USAGE=TestType.TEST2 // = 1} Union.USAGE=TestType.TEST2 pa ne bo šlo. Boš moral: Union.USAGE=(Union)TestType.TEST2.....Pa še par stvari: če uporabljaš enum vrednosti kot zastavice, je pametno to označiti z atributom Flags in glej da bodo vrednosti ustrezne (0, 1, 2, 4, 8, 16, ...) Ne vidim potreben po ločenem Union v tvojem primeru. Usage in Non_usage lahko daš kar v TestType HTH
spirit1 - ponedeljek, 31. julij 2006
test postane zadnji v enum ki nastopa v or-u, torej test2. z typeconverterji se pa nisem prevec igral, tak da niti ne vem kaj tocno pocnejo. ok sklepam da kovertirajo iz enega tipa v drugega