Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Tips about .NET Enums

0.00/5 (No votes)
19 Apr 2004 1  
Some very simple tips using Enum types in VB.NET and C#.NET

Introduction

The following lines of code show you how to retrieve an Enum member, given its integer value or its name. This can be very useful when you are using Enum types in VB.NET or C#.NET and you need to set an Enum type value loading, for example, a string configuration setting from a .config file.

In the following, we suppose to have these .NET namespaces referenced and this custom Enum type defined:

  ' VB.NET version

  Imports System.ComponentModel
  Imports System.Diagnostics

  Public Enum MyEnum
    alfa = 1
    beta = 2
    gamma = 3
  End Enum
  // C#.NET version

  using System.ComponentModel;
  using System.Diagnostics;

  public enum MyEnum
  {
    alfa = 1, 
    beta = 2,
    gamma = 3
  }

How to retrieve an Enum member given its integer value

To retrieve an Enum member given its integer value, simply cast the integer value to your Enum type:

  ' VB.NET version

  Dim MyEnumVal As MyEnum
  Dim i As Integer

  i = 2
  MyEnumVal = CType(i, MyEnum)
  Debug.WriteLine(MyEnumVal.ToString())

The result of the Debug.WriteLine() method will be "beta".

Notice that if you try to cast an integer value that is not defined in the Enum, the code will work without exceptions; in the following code, MyEnumVal receives the value of 4, anyway:

  ' VB.NET version

  i = 4
  MyEnumVal = CType(i, MyEnum)
  Debug.WriteLine(MyEnumVal.ToString())    ' The output is "4"

As suggested by Michael Kennedy (thank you!), with some computing overhead, you can test for defined Enum values using this code:

  ' VB.NET version

  If Not MyEnum.IsDefined(GetType(MyEnum), 4) Then
    Debug.WriteLine("The value of 4 is not defined in the Enum")
  End If

See below for the C#.NET version:

  // C#.NET version

  MyEnum MyEnumVal;
  int i;

  // Retrieve an enum member by its value

  i = 2;
  MyEnumVal = (MyEnum)i;
  Debug.WriteLine(MyEnumVal.ToString());

  // If the specified value is not an enum member,

  // MyEnumVal receives the value anyway

  i = 4;
  MyEnumVal = (MyEnum)i;
  Debug.WriteLine(MyEnumVal.ToString());    // The output is "4"


  // Test for allowed enum values

  if (!MyEnum.IsDefined(typeof(MyEnum), 4))
    Debug.WriteLine("The value of 4 is not defined in the Enum");

How to retrieve an Enum member given its name

To retrieve an Enum member given its name, use the ConvertFrom() method of the TypeConverter class and cast the result to your Enum type:

 ' VB.NET version

 MyEnumVal = CType(TypeDescriptor.GetConverter(MyEnumVal).ConvertFrom("gamma"), MyEnum)
 Debug.WriteLine(MyEnumVal.ToString())    ' The output is "gamma"

An alternative way to reach the same goal is using the Parse() method of System.Enum. This approach, suggested by Dactyl (thank you!), is simpler and 3-times faster than using the TypeConverter class:

  ' VB.NET version

  MyEnumVal = CType(System.Enum.Parse(GetType(MyEnum), "gamma"), MyEnum)

See below for the C#.NET version:

  // C#.NET version

  MyEnumVal = (MyEnum) TypeDescriptor.GetConverter(MyEnumVal).ConvertFrom("gamma");
  Debug.WriteLine(MyEnumVal.ToString());    // The output is "gamma"


  // Dactyl's alternative

  MyEnumVal = (MyEnum) Enum.Parse(typeof(MyEnum), "gamma");

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here