Click here to Skip to main content
15,881,568 members
Articles / Programming Languages / Visual Basic
Article

Tips about .NET Enums

Rate me:
Please Sign up or sign in to vote.
4.26/5 (32 votes)
19 Apr 20041 min read 277.3K   48   32
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
' VB.NET version
Imports System.ComponentModel
Imports System.Diagnostics

Public Enum MyEnum
  alfa = 1
  beta = 2
  gamma = 3
End Enum
C#
// 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
' 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
' 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
' 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#
// 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
' 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
' VB.NET version
MyEnumVal = CType(System.Enum.Parse(GetType(MyEnum), "gamma"), MyEnum)

See below for the C#.NET version:

C#
// 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


Written By
Technical Lead
Italy Italy
I was born in 1970.

My first computer experience dates back to early 80s, with a Sinclair ZX81.
From that time on, as many "friends" say, my IT-illness has increased year by year.

I graduated in Electronic Engineering and earned the following Microsoft certifications:
MCP, MCT, MCDBA, MCSD, MCAD, MCSD for .NET (early achiever).

I worked in IT as a developer, a teacher, a consultant, a technical writer, a technical leader.
IT knowledge applied to real life is my primary interest and focus.

Comments and Discussions

 
GeneralNulls become zero Pin
A Berglas27-Apr-04 17:57
A Berglas27-Apr-04 17:57 
GeneralGetting all values of an enum Pin
mav.northwind22-Apr-04 21:06
mav.northwind22-Apr-04 21:06 
GeneralRe: Getting all values of an enum Pin
28-Apr-04 1:26
suss28-Apr-04 1:26 
GeneralEnum related definitions Pin
Dubant20-Apr-04 21:52
Dubant20-Apr-04 21:52 
GeneralEnum.Parse Pin
Dactyl20-Apr-04 11:15
Dactyl20-Apr-04 11:15 
GeneralRe: Enum.Parse Pin
Alberto Venditti20-Apr-04 22:36
Alberto Venditti20-Apr-04 22:36 
GeneralRe: Enum.Parse Pin
David Parvin2-Jul-04 10:53
David Parvin2-Jul-04 10:53 
GeneralThis Belongs In Your Article Pin
Michael Kennedy20-Apr-04 11:04
Michael Kennedy20-Apr-04 11:04 
Hi,

You should consider adding this method and the underlying ideas to your article:

Enum.IsDefined Method

Consider this code fragment:

<br />
[C#]<br />
enum Days = <br />
{<br />
  M = 1,<br />
  T = 2,<br />
  W = 3,<br />
  Th = 4,<br />
  F = 5,<br />
  Sat = 6,<br />
  Sun = 7<br />
};<br />
<br />
int val = (int)Days.M; // val = 1;<br />
val = 200;<br />
Days day = (Days)val; // This works like a charm.<br />
<br />
// Now there is no enumeration value that is equal to day.<br />
<br />
bool ok = enum.IsDefined(typeof(Days), day);<br />
<br />
// It's not ok. ;)<br />

Just be aware that this runs with a lot of overhead. But usually that doesn't matter.

Take care,
Michael

Michael Kennedy
Partner, Software Engineer
United Binary, LLC
[^]

Index of my code project articles
GeneralRe: This Belongs In Your Article Pin
Alberto Venditti20-Apr-04 21:58
Alberto Venditti20-Apr-04 21:58 
GeneralRe: This Belongs In Your Article Pin
Michael Kennedy21-Apr-04 8:38
Michael Kennedy21-Apr-04 8:38 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.