如何在 C# 中按值获取枚举对象?
Posted
技术标签:
【中文标题】如何在 C# 中按值获取枚举对象?【英文标题】:How to get Enum object by value in C#? 【发布时间】:2013-05-04 01:45:25 【问题描述】:我最近遇到一个需要按值获取Enum对象的情况(通过EF CodeFirst保存),这是我的Enum:
public enum ShipmentStatus
New = 0,
Shipped = 1,
Canceled = 2
所以我需要通过值1获取ShipmentStatus.Shipped
对象。
那我该怎么做呢?
【问题讨论】:
这是一个很好的问题,尽管之前已经在多个线程上讨论过。 【参考方案1】:在与 Enum 斗争之后,我创建了这个 - 一个通用的辅助类,它可以满足我的需要 - 通过值获取键,更重要的是 - 从任何 Enum 类型:
public static class EnumHelpers
public static T GetEnumObjectByValue<T>(int valueId)
return (T) Enum.ToObject(typeof (T), valueId);
所以,要获得 Enum 对象ShipmentStatus.Shipped
,这将返回这个对象:
var enumObject = EnumHelpers.GetEnumObjectByValue<ShipmentStatus>(1);
所以基本上你可以使用任何 Enum 对象并按值获取它的键:
var enumObject = EnumHelpers.GetEnumObjectByValue<YOUR_ENUM_TYPE>(VALUE);
【讨论】:
您可能需要添加检查以确保该值对Enum
有效。根据Enum.ToObject
的文档,它不会进行该检查。你可以使用Enum.IsDefined
。
完全正确!否则,转换只是一行代码。【参考方案2】:
为什么不使用这个内置功能?
ShipmentStatus shipped = (ShipmentStatus)System.Enum.GetValues(typeof(ShipmentStatus)).GetValue(1);
【讨论】:
【参考方案3】:这应该也可以(只需将 int
值转换为 enum
类型):
int _val = 1;
ShipmentStatus _item = (ShipmentStatus)_val;
请注意,如果未定义该枚举,可能会导致错误。
【讨论】:
嗯,没想到这一点。短得多:) 是的,这有点“捷径”:-)以上是关于如何在 C# 中按值获取枚举对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在reactjs / javascript中按值对对象数组进行分组