我最近遇到一個情況下,我需要通過價值得到枚舉對象(通過EF CodeFirst保存),這裏是我的枚舉:如何在C#中通過值獲取枚舉對象?
public enum ShipmentStatus {
New = 0,
Shipped = 1,
Canceled = 2
}
所以我需要得到ShipmentStatus.Shipped
對象按價值。
那麼我怎麼能做到這一點?
我最近遇到一個情況下,我需要通過價值得到枚舉對象(通過EF CodeFirst保存),這裏是我的枚舉:如何在C#中通過值獲取枚舉對象?
public enum ShipmentStatus {
New = 0,
Shipped = 1,
Canceled = 2
}
所以我需要得到ShipmentStatus.Shipped
對象按價值。
那麼我怎麼能做到這一點?
爲什麼不能在功能使用此版本?
ShipmentStatus shipped = (ShipmentStatus)System.Enum.GetValues(typeof(ShipmentStatus)).GetValue(1);
這也不錯! (+) – 2013-05-09 14:44:34
經過一番奮力拼殺與枚舉我創造了這個 - 通用助手類,它會做什麼,我需要 - 通過價值越來越關鍵,更重要的是 - 從任何枚舉類型:
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);
您可能想要添加一個檢查以確保該值對'Enum'有效。根據Enum.ToObject的文檔,它沒有做這個檢查。你可以使用'Enum.IsDefined'。 – juharr 2013-05-09 14:34:44
沒錯!否則,轉換隻是一行代碼。 – 2013-05-09 14:49:19
這應該工作,無論是(只是int
值鑄造enum
型):
int _val = 1;
ShipmentStatus _item = (ShipmentStatus)_val;
當心的是,如果沒有定義該枚舉它可能會導致錯誤。
嗯沒有想到這一點。很短:) :) – middelpat 2013-05-09 14:53:51
是的,它有點「快捷」:-) – 2013-05-09 23:37:31
這是一個很好的問題,儘管之前在多個線程中討論過。 – 2013-05-09 14:46:37