Elnevezett állandók számokkal való ábrázolása C-ben#
Képzelje el, hogy egy projekten dolgozik a megrendelések állapotának nyomon követéséhez, és olyan értékeket kell rendszereznie, mint a "Függőben", a "Szállítás" vagy a "Kézbesítve" egyértelmű és kezelhető módon. Az enumerálások C#-ban való használatával létrehozhatja ezeknek a rendelési állapotoknak a listáját. Az enumerálások használatával egyszerűbben használhatja ezeket az állapotokat a projektben anélkül, hogy újra és újra megkeresi őket.
Az enumerálási forgatókönyv és az enumerálás értékének ismertetése
Az enumerálások ideálisak olyan előre definiált értékek halmazához, amelyek kölcsönösen kizárják vagy kombinálhatók. Például egy enumerálás használatával határozhatja meg az év évszakait:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
A kódminta bemutatja, hogyan definiálhat számokat a kölcsönösen kizáró értékek megjelenítéséhez.
Az enumerálások javítják a kód olvashatóságát, ha a numerikus literálokat értelmes nevekre cserélik. Emellett segítenek megakadályozni az érvénytelen értékek hozzárendelését is, mivel csak a megadott állandók engedélyezettek.
Megjegyzés
Az enumerálások bitjelölőkkel is jelölhetik a választási lehetőségek kombinációit, amelyek olyan helyzetekben hasznosak, mint a fájlengedélyek vagy a konfigurációs beállítások.
Enumerálások definiálása
Egy szám C#-ban való definiálásához használja a enum kulcsszót, majd az enum és a tagok nevét. Íme egy példa egy egyszerű számra a hét napjaira vonatkozóan:
enum DaysOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
A kódminta bemutatja, hogyan definiálhat számokat a hét napjaira.
Alapértelmezés szerint az enum alapjául szolgáló típus az int, és az értékek 0-nál kezdődnek, és minden tagnál 1-zel növekszik.
Megjegyzés
Az enumerálások integráltípusokra (például , , intbyte) korlátozódnak, shortés nem jelölhetnek nem integrálható értékeket, például sztringeket vagy decimális értékeket.
Mögöttes típusok és értékek beállítása enumeráláshoz
Megadhat egy másik mögöttes integráltípust egy enumhoz, és egyéni értékeket rendelhet hozzá a tagokhoz. Például:
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
A kódminta bemutatja, hogyan állíthat be egyéni mögöttes típust és értékeket egy enumeráláshoz.
Ez a rugalmasság lehetővé teszi az enumerálási értékek külső rendszerekkel vagy meghatározott követelményekkel való igazítását.
Jótanács
Kerülje a nem integrál típusokat, például char az enumerálás alapjául szolgáló típust, ami megbízhatatlan viselkedéshez vezethet.
Átalakítások végrehajtása számokkal
Az enumerálások támogatják a tagok és a mögöttes integráltípus közötti explicit konverziókat. Például:
DaysOfWeek day = (DaysOfWeek)3;
Console.WriteLine(day); // Outputs: Wednesday
A kódminta bemutatja, hogyan hajthat végre explicit átalakítást egy integrál értékről enumerálásra.
Az enumerálási értékeket a System.Enum.IsDefined következő módszerrel ellenőrizheti:
bool isValid = Enum.IsDefined(typeof(DaysOfWeek), 3);
Console.WriteLine(isValid); // Outputs: True
A kódminta bemutatja, hogyan érvényesíthet egy enumerálási értéket a használatával System.Enum.IsDefined.
Jótanács
Ha az érték érvénytelen, akkor az alapértelmezett érték hozzárendelésével vagy kivétellel kezelhető a biztonságos használat érdekében.
Ajánlott eljárások alkalmazása enumerálások tervezéséhez
Az enumerálás hatékony tervezése:
- Használjon egyes főneveket egyszerű számokat és többes számú főneveket a jelzőszámhoz.
- Adjon meg nulla értéket az egyszerű, általában elnevezett
Noneszámokat. - Kerülje a speciális vagy fenntartott értékek használatát, mivel megzavarhatják a felhasználókat.
- A bitenkénti műveletek engedélyezéséhez használjon két hatványt a jelölő enumerálásához.
Jótanács
Fontolja meg a bővítménymetelyek hozzáadását az enumeráláshoz további funkciókhoz, például az ellenőrzéshez vagy a formázáshoz.
Enumerálás egyéni értékekkel és metódusokkal
Bár az enumerálások nem tartalmazhatnak közvetlenül metódusokat, bővítménymetelyekkel adhat hozzá funkciókat. Például:
public static class DaysOfWeekExtensions
{
public static bool IsWeekend(this DaysOfWeek day)
{
return day == DaysOfWeek.Saturday || day == DaysOfWeek.Sunday;
}
}
DaysOfWeek today = DaysOfWeek.Saturday;
Console.WriteLine(today.IsWeekend()); // Outputs: True
A kódminta bemutatja, hogyan használható bővítménymetódus egy enumerálási funkció hozzáadásához.
Jótanács
A bővítménymetelyekkel a definíció módosítása nélkül javíthatja a számokat, így sokoldalúbbá és újrafelhasználhatóbbá teheti őket.
Gyakorlati példa: Enumerálások használata a rendelési állapotok kezeléséhez
Az enumerálásokat gyakran használják az alkalmazások az előre definiált értékek megjelenítésére. Egy e-kereskedelmi alkalmazásban például számmal kezelheti a rendelések állapotát:
enum OrderStatus
{
Pending,
Shipped,
Delivered,
Cancelled
}
class Order
{
public int OrderId { get; set; }
public OrderStatus Status { get; set; }
public void UpdateStatus(OrderStatus newStatus)
{
Status = newStatus;
Console.WriteLine($"Order {OrderId} status updated to {Status}");
}
}
var order = new Order { OrderId = 123, Status = OrderStatus.Pending };
order.UpdateStatus(OrderStatus.Shipped);
Ez a példa bemutatja, hogyan definiálhat egy enumerát a rendelési állapotokhoz, hogyan használhatja azt egy osztályban, és hogyan frissítheti egy rendelés állapotát. Segít a kezdőknek, hogy lássák, hogyan alkalmazhatók az enumerálások egy valós forgatókönyvben.
Enumerálások használatával a numerikus literálokat értelmes nevekre cserélheti, így a kód intuitívabbá és könnyebben karbantarthatóvá válik, miközben explicit konverziókat és érvényesítéseket is lehetővé tesz, hogy biztonságosan használhassa ezeket az állandókat a projektekben.