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

MessageType: We see the MessageType enum, which is a series of int values you can access with strongly-typed named constants.

Message: This class contains an array. The array is initialized to contain the number of elements equal to the count constants in the MessageType enum.

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.

For
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
Access routines. This code 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.

Info: The example does not show any access routines, but you could implement some on Message.

Tip: It would be best to even remove the public modifier from the array. You can find tips on access routines in Code Complete.

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.
© 2007-2019 Sam Allen. Every person is special and unique. Send bug reports to info@dotnetperls.com.
Home
Dot Net Perls