HomeSearch

C# Enum Array Example, Use Enum as Array Index

This C# program uses an array that is indexed with enum values. It shows how to cast an enum to an int.

Enum, array indexes.

An enum array has many uses. It can be accessed with enum values. This technique is ideal for some kinds of data such as numeric data. It provides another way to keep track of values or statistics.Enum

Info: This example shows how to index an array of values with enum keys. It shows an array with enhanced syntax.

Example.

Enum values are integral types, meaning they are usually Int32 values. Like any integer value, you can access an array with their values. Enum values are ordered starting with zero, based on their textual order.Int, uint

Here: In the example, the first enum named constant in MessageType is zero, and the second is one.

C# program that uses enum indexes using System; /// <summary> /// Enum values used to index array. /// </summary> enum MessageType { Startup, Shutdown, Reload, Refresh, Sleep, Error, Max } /// <summary> /// Contains array of elements indexed by enums. /// </summary> static class Message { /// <summary> /// Contains one element per enum. /// </summary> public static int[] _array = new int[(int)MessageType.Max]; } class Program { static void Main() { // Assign an element using enum index. Message._array[(int)MessageType.Startup] = 3; // Assign an element. Message._array[(int)MessageType.Error] = -100; // Increment an element using enum index. Message._array[(int)MessageType.Refresh]++; // Decrement an element using enum index. Message._array[(int)MessageType.Refresh]--; // Preincrement and assign an element. int value = ++Message._array[(int)MessageType.Shutdown]; // Loop through enums. for (MessageType type = MessageType.Startup; type < MessageType.Max; type++) { Console.Write(type); Console.Write(' '); Console.WriteLine(Message._array[(int)type]); } } } Output Startup 3 Shutdown 1 Reload 0 Refresh 0 Sleep 0 Error -100

We see the MessageType enum,

which is a series of int values you can access with strongly-typed named constants. We also see a class containing the array we will access with those constants. The third part is the Main method.

Tip: MessageType contains seven named constants. It is usually best to start with a None constant and end with a Length constant.

Message class.

The class shown next is the Message class and it contains an array. The array is initialized to contain the number of elements that is equal to the count of named constants in the MessageType enum.

Tip: This makes it easy to use the named constants to access parts of this array.

Note: The array is public and static. It is a global variable array. It can be used throughout the program.

The statements

in the method's body assign, increment, decrement, and preincrement elements in the array using the MessageType enumeration's named constants. This changes the values in the public static array.

And: The enumeration values are treated as integers by using explicit casts. MessageType.Startup is 0. MessageType.Error is 5.

Finally: The example shows how to loop through enumerated values. The for-loop here goes through each enum except the last one.

Access routines.

This code basically shows how to use a global variable array in a reasonable way. When using global variables, you should use accessor routines, which provide a level of abstraction on your usage of the globals.

The example

does not show any access routines, but you could easily implement some on the Message class. It would be best to even remove the public modifier from the array. You can find tips on access routines in Code Complete (page 340).Public, private

Exceptions.

Our code in this article is vulnerable to exceptions during runtime. You can use access routines to mitigate this possibility. For critical variables that must be statics, it is still best to use separate variables at the type level.

Tip: Because the array lookup must occur before getting the value, the code here is slightly slower in many cases as well.

But: On the other hand, it forces the variable to stored together, which will provide better locality of reference.

Summary.

Array elements can be accessed with enums. We looked at an example of code that looks up elements this way and then saw its output. We next discussed some problems with this code and some of its benefits.Array
Home
Dot Net Perls
© 2007-2019 Sam Allen. All rights reserved. Written by Sam Allen, info@dotnetperls.com.