我最近遇到了一个需要按值获取Enum对象(通过 EF CodeFirst 保存)的情况,这是我的Enum:
public enum ShipmentStatus {
New = 0,
Shipped = 1,
Canceled = 2
}
所以我需要ShipmentStatus.Shipped
按值1获取对象。
那我怎么能做到呢?
我最近遇到了一个需要按值获取Enum对象(通过 EF CodeFirst 保存)的情况,这是我的Enum:
public enum ShipmentStatus {
New = 0,
Shipped = 1,
Canceled = 2
}
所以我需要ShipmentStatus.Shipped
按值1获取对象。
那我怎么能做到呢?
这应该可以工作,或者(只是将int
值转换为enum
类型):
int _val = 1;
ShipmentStatus _item = (ShipmentStatus)_val;
请注意,如果未定义该枚举,则可能会导致错误。
为什么不使用此内置功能?
ShipmentStatus shipped = (ShipmentStatus)System.Enum.GetValues(typeof(ShipmentStatus)).GetValue(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);