3.6 Enums
attributes? access-modifier?
new?
enum enum-name [ : integer-type ]?
{ [attributes? enum-member-name
[ = value ]? ]* }
Enums specify a group of named numeric constants:
public enum Direction {North, East, West, South}
Unlike in C, enum members must be used with the enum type name. This
resolves naming conflicts and makes code clearer:
Direction walls = Direction.East;
By default, enums are assigned integer constants 0, 1, 2, etc. You
may optionally specify an alternative numeric type to base your enum
on, and explicitly specify values for each enum member:
[Flags]
public enum Direction : byte {
North=1, East=2, West=4, South=8
}
Direction walls = Direction.North | Direction.West;
if((walls & Direction.North) != 0)
System.Console.WriteLine("Can't go north!");
The [Flags] attribute is optional, and informs the
runtime that the values in the enum can be bit-combined, and should
be decoded accordingly in the debugger or when outputting text to the
console. For example:
Console.WriteLine(walls.Format( )); // Displays "North|West"
Console.WriteLine(walls); // Calls walls.ToString, displays "5"
The System.Enum type also provides many useful
static methods for enums that allow one to determine the underlying
type of an enum, to check if a specific value is supported, to
initialize an enum from a string constant, to retrieve a list of the
valid values, and other common operations such as conversions. Here
is an example of the usage:
using System;
public enum Toggle : byte { Off=0, On=1 }
class Test {
static void Main( ) {
Type t = Enum.GetUnderlyingType(typeof(Toggle));
Console.WriteLine(t); // Prints "Byte"
bool bDimmed = Enum.IsDefined(typeof(Toggle), "Dimmed");
Console.WriteLine(bDimmed); // Prints "False"
Toggle tog =(Toggle)Enum.Parse(typeof(Toggle), "On");
Console.WriteLine(Enum.Format(typeof(Toggle), tog, "D")); // Prints "1"
Console.WriteLine(tog); // Prints "On"
object[ ] oa = Enum.GetValues(typeof(Toggle));
foreach(Toggle toggle in oa) // Prints "On=1, Off=0"
Console.WriteLine("{0}={1}", toggle,Enum.Format(typeof(Toggle),
toggle, "D"));
}
}
3.6.1 Enum Operators
The operators relevant to
enums
are:
= = != < > <= >= + - ^ & | ~
= += -= ++ -- sizeof
3.6.2 Enum Conversions
Enums may be explicitly converted to
other
enums. Enums and numeric types may be explicitly converted to one
another. A special case is the numeric literal 0,
which may be implicitly converted to an enum.
|