How to get Enum object by value in C#?
18,440
Solution 1
Why not use this build in feature?
ShipmentStatus shipped = (ShipmentStatus)System.Enum.GetValues(typeof(ShipmentStatus)).GetValue(1);
Solution 2
This should work, either (just casting the int
value to enum
type):
int _val = 1;
ShipmentStatus _item = (ShipmentStatus)_val;
Beware, that it may cause an error if that enum is not defined.
Solution 3
After some battling with Enum I created this - a universal helper class that will do what I needed - getting key by value, and more importantly - from ANY Enum type:
public static class EnumHelpers {
public static T GetEnumObjectByValue<T>(int valueId) {
return (T) Enum.ToObject(typeof (T), valueId);
}
}
So, to get Enum object ShipmentStatus.Shipped
this will return this object:
var enumObject = EnumHelpers.GetEnumObjectByValue<ShipmentStatus>(1);
So basicaly you can use any Enum object and get its key by value:
var enumObject = EnumHelpers.GetEnumObjectByValue<YOUR_ENUM_TYPE>(VALUE);
Author by
mikhail-t
Updated on June 14, 2022Comments
-
mikhail-t almost 2 years
I recently encountered a case when I needed to get an Enum object by value (to be saved via EF CodeFirst), and here is my Enum:
public enum ShipmentStatus { New = 0, Shipped = 1, Canceled = 2 }
So I needed to get
ShipmentStatus.Shipped
object by value 1.So how could I accomplish that?
-
juharr almost 11 yearsYou might want to add a check to make sure the value is valid for the
Enum
. According the the documentation forEnum.ToObject
it does not do that check. You can useEnum.IsDefined
for that. -
Alexander Bell almost 11 yearsExactly right! Otherwise, the conversion is just a line of code.
-
middelpat almost 11 yearshmm didn't think about this. a lot shorter :)
-
Alexander Bell almost 11 yearsYeah, it's kinda "short-cut" :-)