将 int 转换为 enum 的正确方法

发布于 2024-10-21 00:09:33 字数 538 浏览 3 评论 0原文

可能的重复:
在 C# 中将 int 转换为 Enum

我从数据库中获取一个 int 值并想要将值转换为枚举变量。在 99.9% 的情况下,int 将匹配枚举声明中的值之一。

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

eOrderType orderType = (eOrderType) FetchIntFromDb();

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

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

有什么想法吗?

Possible Duplicate:
Cast int to Enum in C#

I fetch a int value from the database and want to cast the value to an enum variable. In 99.9% of the cases, the int will match one of the values in the enum declaration

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

eOrderType orderType = (eOrderType) FetchIntFromDb();

In the edge case, the value will not match (whether it's corruption of data or someone manually going in and messing with the data).

I could use a switch statement and catch the default and fix the situation, but it feels wrong. There has to be a more elegant solution.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梨涡 2024-10-28 00:09:33

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

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

You can use the IsDefined method to check if a value is among the defined values:

bool defined = Enum.IsDefined(typeof(eOrderType), orderType);
诠释孤独 2024-10-28 00:09:33

您可以这样做

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

,或者更确切地说,我会将 GetValues() 结果缓存在静态变量中,并一遍又一遍地使用它。

You can do

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

or rather I would cache the GetValues() results in a static variable and use it over and over gain.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文