2013-05-09 35 views
5

我最近遇到一个情况下,我需要通过价值得到枚举对象(通过EF CodeFirst保存),这里是我的枚举如何在C#中通过值获取枚举对象?

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

所以我需要得到ShipmentStatus.Shipped对象按价值。

那么我怎么能做到这一点?

+0

这是一个很好的问题,尽管之前在多个线程中讨论过。 – 2013-05-09 14:46:37

回答

6

为什么不能在功能使用此版本?

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

这也不错! (+) – 2013-05-09 14:44:34

1

经过一番奋力拼杀与枚举我创造了这个 - 通用助手类,它会做什么,我需要 - 通过价值越来越关键,更重要的是 - 从任何枚举类型:

public static class EnumHelpers { 

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

} 

所以,得到枚举对象ShipmentStatus.Shipped这将返回这个对象:

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

所以basicaly你可以使用任何枚举对象,并通过价值得到其关键:

var enumObject = EnumHelpers.GetEnumObjectByValue<YOUR_ENUM_TYPE>(VALUE); 
+4

您可能想要添加一个检查以确保该值对'Enum'有效。根据Enum.ToObject的文档,它没有做这个检查。你可以使用'Enum.IsDefined'。 – juharr 2013-05-09 14:34:44

+0

没错!否则,转换只是一行代码。 – 2013-05-09 14:49:19

6

这应该工作,无论是(只是int值铸造enum型):

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

当心的是,如果没有定义该枚举它可能会导致错误。

+1

嗯没有想到这一点。很短:) :) – middelpat 2013-05-09 14:53:51

+0

是的,它有点“快捷”:-) – 2013-05-09 23:37:31