关于C#:将int强制转换为枚举的正确方法

The correct way of casting an int to an enum

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Cast int to Enum in C#

我从数据库中获取一个int值,并希望将该值强制转换为枚举变量。在99.9%的情况下,int将与枚举声明中的一个值匹配

1
2
3
4
5
6
7
8
9
public enum eOrderType {
    Submitted = 1,
    Ordered = 2,
    InReview = 3,
    Sold = 4,
    ...
}

eOrderType orderType = (eOrderType) FetchIntFromDb();

在边缘情况下,该值将不匹配(无论是数据损坏还是有人手动进入并处理数据)。

我可以使用switch语句,捕获default并修复这种情况,但感觉不对。必须有一个更优雅的解决方案。

有什么想法吗?


可以使用IsDefined方法检查值是否在定义的值中:

1
bool defined = Enum.IsDefined(typeof(eOrderType), orderType);

你可以做到

1
2
int value = FetchIntFromDb();
bool ok = System.Enum.GetValues(typeof(eOrderType)).Cast<int>().Contains(value);

或者更确切地说,我将缓存getValues()的结果,并使用静态变量进行多次获取。