Opsommingstypen (C#-verwijzing)
Een opsommingstype (of enumtype) is een waardetype dat is gedefinieerd door een set benoemde constanten van het onderliggende integrale numerieke type. Als u een opsommingstype wilt definiëren, gebruikt u het enum
trefwoord en geeft u de namen van enum-leden op:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
Standaard zijn de gekoppelde constante waarden van enum-leden van het type int
; ze beginnen met nul en nemen met één toe na de definitietekstvolgorde. U kunt elk ander integraal numeriek type expliciet opgeven als een onderliggend type van een opsommingstype. U kunt ook expliciet de bijbehorende constantewaarden opgeven, zoals in het volgende voorbeeld wordt weergegeven:
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
U kunt geen methode definiëren binnen de definitie van een opsommingstype. Als u functionaliteit wilt toevoegen aan een opsommingstype, maakt u een extensiemethode.
De standaardwaarde van een opsommingstype E
is de waarde die wordt geproduceerd door de expressie (E)0
, zelfs als nul niet het bijbehorende enumlid heeft.
U gebruikt een opsommingstype om een keuze te vertegenwoordigen uit een reeks wederzijds exclusieve waarden of een combinatie van keuzes. Als u een combinatie van keuzes wilt weergeven, definieert u een opsommingstype als bitvlagken.
Opsommingstypen als bitvlagmen
Als u wilt dat een opsommingstype een combinatie van keuzes vertegenwoordigt, definieert u opsommingsleden voor deze keuzes, zodat een afzonderlijke keuze een bitveld is. Dat wil gezegd: de bijbehorende waarden van die enumleden moeten de bevoegdheden van twee zijn. Vervolgens kunt u de bitsgewijze logische operatoren |
gebruiken of &
keuzen combineren of combinaties van keuzen combineren. Als u wilt aangeven dat een opsommingstype bitvelden declareert, past u het kenmerk Vlaggen hierop toe. Zoals in het volgende voorbeeld wordt weergegeven, kunt u ook enkele typische combinaties opnemen in de definitie van een opsommingstype.
[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
}
}
Zie de System.FlagsAttribute API-referentiepagina en de niet-exclusieve leden en de sectie Flags-kenmerken van de System.Enum API-referentiepagina voor meer informatie en voorbeelden.
Het type System.Enum enum-beperking
Het System.Enum type is de abstracte basisklasse van alle opsommingstypen. Het biedt een aantal methoden om informatie op te halen over een opsommingstype en de bijbehorende waarden. Zie de System.Enum API-referentiepagina voor meer informatie en voorbeelden.
U kunt in een basisklassebeperking (ook wel de enumbeperking genoemd) gebruiken System.Enum
om op te geven dat een typeparameter een opsommingstype is. Elk opsommingstype voldoet ook aan de struct
beperking, die wordt gebruikt om op te geven dat een typeparameter een niet-null-waardetype is.
Conversies
Voor elk opsommingstype bestaan er expliciete conversies tussen het opsommingstype en het onderliggende integrale type. Als u een enum-waarde naar het onderliggende type cast , is het resultaat de bijbehorende integrale waarde van een enum-lid.
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
}
}
Gebruik de Enum.IsDefined methode om te bepalen of een opsommingstype een opsommingslid bevat met de bepaalde gekoppelde waarde.
Voor elk opsommingstype bestaan er boksen en het ongedaan maken van conversies van en naar het System.Enum type, respectievelijk.
C#-taalspecificatie
Zie de volgende secties van de C#-taalspecificatie voor meer informatie:
- Enums
- Enum-waarden en -bewerkingen
- Logische operators inventariseren
- Vergelijkingsoperatoren voor opsomming
- Expliciete opsommingsconversies
- Impliciete opsommingsconversies