将int转换为枚举的正确方法

10

可能是重复问题:
如何在C#中将int转换为枚举类型

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

public enum eOrderType {
    Submitted = 1,
    Ordered = 2,
    InReview = 3,
    Sold = 4,
    ...
}

eOrderType orderType = (eOrderType) FetchIntFromDb();

在极端情况下,该值将不匹配(无论是数据损坏还是有人手动更改数据)。

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

有什么想法吗?


你看过其他的将int转换为枚举类型的问题吗? - Metro Smurf
关于使用枚举类型的一般性建议:请确保始终包含默认值0。例如:public enum eOrderType { None = 0, Submitted = 1, ... } - Metro Smurf
我认为这个问题与“将int转换为枚举”问题略有不同。恰好,那个问题的第二高票答案也是对这个问题的一个很好的回答。 - Daniel Pratt
2个回答

6
您可以使用IsDefined方法检查一个值是否在定义的值之间:
bool defined = Enum.IsDefined(typeof(eOrderType), orderType);

1

你可以做到

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

或者我会将GetValues()的结果缓存到静态变量中,然后反复使用它。


1
那是我的初步答案(基本上),直到我意识到 Enum 类中已经有一个方法可以做到这一点... ;) - Guffa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接