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:
- Enumerálás
- Értékek és műveletek számbavétele
- Logikai operátorok számbavétele
- Enumerálási összehasonlító operátorok
- Explicit enumerálási konverziók
- Implicit enumerálási konverziók
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: