Checking whether an enum value exists by an integer reference in C#
January 22, 2016 Leave a comment
Say you have the following ShipmentOption enumeration:
public enum ShipmentOption { Land, Sea, Air }
By default each enumeration value will have an integer representation starting with 0. So 0 corresponds to Land, 1 to Sea and 2 to Air. Imagine that a method accepts the numeric value like this:
public void SendShipment(int numericShipmentType)
Then the incoming numeric parameter could be anything. How can we check whether an integer has a corresponding enumeration value?
The following code will do just that:
public void SendShipment(int numericShipmentType) { if (Enum.IsDefined(typeof(ShipmentOption), numericShipmentType)) { Console.WriteLine("This type is defined: {0}", (ShipmentOption)numericShipmentType); } else { throw new InvalidEnumArgumentException("ShipmentOption", numericShipmentType, typeof(ShipmentOption)); } }
The InvalidEnumArgumentException class is defined in the System.ComponentModel namespace.
Passing in 2 will result in the following output:
This type is defined: Air
An invalid integer argument will throw an exception:
The value of argument ‘ShipmentOption’ (5) is invalid for Enum type ‘ShipmentOption’.
View all various C# language feature related posts here.