我有一个简单的枚举
public enum TestEnum
{
TestOne = 3,
TestTwo = 4
}
var testing = TestEnum.TestOne;
我想通过反射检索它的值 (3)。关于如何执行此操作的任何想法?
最佳答案
好问题垫。
题目的场景是这样的:
You have some unknown enum type and some unknown value of that type and you want to get the underlying numeric value of that unknown value.
这是使用反射的单行方法:
object underlyingValue = Convert.ChangeType(value, Enum.GetUnderlyingType(value.GetType()));
如果值恰好是 TestEnum.TestTwo
,则 value.GetType()
将等于 typeof(TestEnum)
,Enum.GetUnderlyingType(value.GetType())
将等于 typeof(int)
并且值将为 3(已装箱;请参阅 http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx 了解有关装箱和拆箱值的更多详细信息).
为什么需要编写这样的代码?就我而言,我有一个将值从 View 模型复制到模型的例程。我在 ASP.NET MVC 项目的所有处理程序中都使用它作为非常干净和优雅的体系结构的一部分,用于编写不存在 Microsoft 模板生成的处理程序存在的安全问题的处理程序。
该模型由 Entity Framework 从数据库生成,它包含一个 int 类型的字段。 viewmodel 有一个枚举类型的字段,我们称它为 RecordStatus,我在项目的其他地方定义了它。我决定在我的框架中完全支持枚举。但是现在模型中字段的类型与 View 模型中相应字段的类型不匹配。我的代码检测到这一点,并使用类似于上面给出的单行代码的代码将枚举转换为 int。
关于c# - 通过反射获取枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3565310/