6

我最近遇到了一个需要按值获取Enum对象(通过 EF CodeFirst 保存)的情况,这是我的Enum

public enum ShipmentStatus {
  New = 0,
  Shipped = 1,
  Canceled = 2
}

所以我需要ShipmentStatus.Shipped按值1获取对象。

那我怎么能做到呢?

4

3 回答 3

11

这应该可以工作,或者(只是将int值转换为enum类型):

int _val = 1;
ShipmentStatus _item = (ShipmentStatus)_val;

请注意,如果未定义该枚举,则可能会导致错误。

于 2013-05-09T14:38:26.573 回答
8

为什么不使用此内置功能?

ShipmentStatus shipped = (ShipmentStatus)System.Enum.GetValues(typeof(ShipmentStatus)).GetValue(1);
于 2013-05-09T14:34:10.310 回答
1

在与Enum进行了一番斗争之后,我创建了这个 - 一个通用的辅助类,它将做我需要的 - 按值获取键,更重要的是 - 从任何Enum类型:

public static class EnumHelpers {

  public static T GetEnumObjectByValue<T>(int valueId) {
    return (T) Enum.ToObject(typeof (T), valueId);
  }

}

因此,要获取Enum对象,ShipmentStatus.Shipped这将返回此对象:

var enumObject = EnumHelpers.GetEnumObjectByValue<ShipmentStatus>(1);

所以基本上你可以使用任何Enum对象并按值获取它的键:

var enumObject = EnumHelpers.GetEnumObjectByValue<YOUR_ENUM_TYPE>(VALUE);
于 2013-05-09T14:29:27.610 回答