Számbavételi típusok (C#-referencia)

Az enumerálási típus (vagy enumerálási típus) az alapul szolgáló integrál numerikus típus nevesített állandói által meghatározott értéktípus. Enumerálási típus meghatározásához használja a enum kulcsszót, és adja meg az enumerálási tagok nevét:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Alapértelmezés szerint az enumerálási tagok társított állandó értékei típusuk int; nullával kezdődnek, és a definíció szövegsorrendje alapján eggyel növekednek. Bármely más integrál numerikus típust explicit módon megadhat enumerálási típus mögöttes típusaként. A társított állandó értékeket explicit módon is megadhatja, ahogy az alábbi példa is mutatja:

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

Az enumerálási típus definíciója nem definiálhat metódust. Ha funkciókat szeretne hozzáadni egy enumerálási típushoz, hozzon létre egy bővítménymetódust.

Az enumerálási típus E alapértelmezett értéke a kifejezés (E)0által előállított érték, még akkor is, ha a nulla nem rendelkezik a megfelelő enumerálási tagtal.

Enumerálási típussal egy kölcsönösen kizáró értékkészletből vagy választási lehetőségek kombinációjából származó választási lehetőségeket jelölhet. A választási lehetőségek kombinációjának megjelenítéséhez definiáljon egy enumerálási típust bitjelölőkként.

Számbavételi típusok bitjelölőként

Ha azt szeretné, hogy az enumerálási típus a választási lehetőségek kombinációját jelölje, adja meg az enumerálási tagokat ezekhez a választási lehetőségekhez, hogy az egyéni választás egy bit mező legyen. Vagyis az enumerálási tagok társított értékeinek kettőnek kell lenniük. Ezután használhatja a bitenkénti logikai operátorokat|, vagy & kombinálhatja a választási lehetőségeket, vagy metszheti a választási lehetőségek kombinációit. Annak jelzéséhez, hogy egy enumerálási típus bitmezőket deklarál, alkalmazza rá a Flags attribútumot. Ahogy az alábbi példa is mutatja, az enumerálási típus definíciójában néhány tipikus kombináció is szerepelhet.

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

További információkért és példákért tekintse meg az System.FlagsAttribute API referenciaoldalát, a nem kizárólagos tagokat és az System.Enum API referencialap Flags attribútum szakaszát.

A System.Enum típus és az enum kényszer

A System.Enum típus az összes enumerálási típus absztrakt alaposztálya. Számos módszert biztosít az enumerálási típussal és értékeivel kapcsolatos információk lekéréséhez. További információkért és példákért tekintse meg az API referenciaoldalát System.Enum .

Az alaposztály-kényszerben (más néven enumerálási kényszerben) megadhatjaSystem.Enum, hogy a típusparaméter enumerálási típus-e. Bármely enumerálási típus is megfelel a struct korlátozásnak, amely azt határozza meg, hogy egy típusparaméter nem null értékű értéktípus.

Konverziók

Bármely enumerálási típus esetében explicit konverziók léteznek az enumerálási típus és annak mögöttes integráltípusa között. Ha enumerálási értéket ad a mögöttes típushoz, az eredmény egy enumerálási tag társított integrálértéke.

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

Enum.IsDefined A metódussal meghatározhatja, hogy egy enumerálási típus tartalmaz-e egy adott társított értékkel rendelkező enumerálási tagot.

Minden enumerálási típus esetében léteznek dobozolások, illetve a típusra és a típusból való System.Enum visszaküldés feloldása.

C# nyelvspecifikáció

További információt a C# nyelvspecifikációjának alábbi szakaszaiban talál:

Lásd még