2013-05-09 46 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