简体   繁体   中英

How to get Enum object by value in C#?

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?

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.

为什么不使用这个内置功能?

ShipmentStatus shipped = (ShipmentStatus)System.Enum.GetValues(typeof(ShipmentStatus)).GetValue(1);

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM