c# - 通过反射获取枚举值

标签 c# reflection enums

我有一个简单的枚举

 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/

相关文章:

C++ 枚举语法

c# - 将枚举数据绑定(bind)到复选框 C#

c# - 使用 Lambda 或 LINQ 将一个类列表转换或映射到另一个类列表?

java - 如何在不使用 @RunWith 或 AOP 的情况下在每个 JUnit @Test 方法之前单独运行一些代码?

go - 将界面转换为另一个界面并复制内容

Java Enum 构造函数是私有(private)的吗?

c# - 如何从泛型中获取 bool 值作为返回对象

c# - Python 和 C# 之间的 IPC

c# - 我如何从对象列表中获取 n 个元素的不同元组的所有组合?

powershell - Powershell/.net反射-GetMethod()查找常规方法,但找不到通用方法-为什么?