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 "NorthWest" 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 , which may be implicitly converted to an enum.



C# in a Nutshell
C # in a Nutshell, Second Edition
ISBN: 0596005261
EAN: 2147483647
Year: 2005
Pages: 963

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net