C# 当我有一个字符串和一个整数时,如何在运行时将int值转换为enum值?

C# 当我有一个字符串和一个整数时,如何在运行时将int值转换为enum值?,c#,reflection,enums,C#,Reflection,Enums,我有一个字符串变量,它是枚举的名称。我有枚举的整数。如何将其转换为枚举本身的实例 Enum TestEnum { One = 1, Two = 2, Three = 3 } string str = "TestEnum"; int intValue = 2; 我看到很多帖子都要求你有一个enum的实例来得到它 我需要在运行时这样做 编辑: 我正在尝试编写一个类,该类在一个api中获取和设置设置,该api有数百个表示设置的枚举 枚

我有一个字符串变量,它是枚举的名称。我有枚举的整数。如何将其转换为枚举本身的实例

Enum TestEnum
    {
        One = 1,
        Two = 2,
        Three = 3
    }

string str = "TestEnum";
int intValue = 2;
我看到很多帖子都要求你有一个enum的实例来得到它

我需要在运行时这样做

编辑: 我正在尝试编写一个类,该类在一个api中获取和设置设置,该api有数百个表示设置的枚举

枚举中断按5种基本设置类型进行分类,由5个枚举表示。这些枚举类似于:

DoubleValueEnum
IntegerValueEnum
BooleanValueEnum
StringValueEnum
这些枚举是指向double、integer、string和bool类型设置的指针。我相信在引擎盖下面,他们有一个数据库,保存着这样一张表:

Type    key    value      Represents
------- ------ -------    ---------------------------------
Double  23     2.745      DoubleValueEnum.DrawingWidth
Integer 5      18         IntegerValueEnum.PenColor
Double  54     15.9245    DoubleValueEnum.GridMajorSpacing
对于double,没有它所指向的“较低”枚举。对于整数,有一个更深的枚举,如“PenNumber.Red=1,PenColor.Green=2”

假想钢笔颜色:

Enum PenColor
{
    Red = 1,
    Blue = 2,
}
每个枚举都有数百个值。每个枚举都有一个预写函数,用于获取或设置枚举:

GetDoubleEnumValue(int, option)
GetIntegerValueEnum(int, option)
GetBooleanValueEnum(int, option)
GetStringValueEnum(int, option)

SetXXXXXEnumValue(enum, value)
SetDoubleEnumValue(int, int)
SetIntegerValueEnum(int, int)
SetBooleanValueEnum(int, int)
SetStringValueEnum(int, int)
实例:

SetIntegerValueEnum ((int)IntegerValueEnum.swDxfVersion, (int)swDxfFormat_e.swDxfFormat_R14);

对于给定的枚举定义:

enum TestEnum
{
1=1,
二等于二,
三=3
}
枚举测试m2
{
一点1=1,
一点2=2,
一点3=3
}
用于将字符串值解析为枚举值

string str = "Two";
TestEnum valueAsEnum = (TestEnum)Enum.Parse(typeof(TestEnum), str);
但是,您需要知道要分析的枚举定义的类型。如果枚举值的确切类型未知,但您确实知道可能的类型,则可以使用

如果不知道枚举的特定类型,但知道类名,则可以使用解析类型

要使其正常工作,您确实需要知道要解析的类型的完整命名空间,并且必须已加载在其中定义该类型的程序集

此处讨论将int转换为enum的语法:

在本例中,我们知道所有枚举都位于
API.Client.enums
命名空间中:

string str=“TestEnum”;
int值=2;
string ns=“API.Client.Enums”;
Type enumType=Type.GetType($“{ns}.{str}”);
//现在我们可以解析该值:
对象值=Enum.ToObject(enumType,(object)intValue);
通常,我们不需要为了在系统之间传递值而进行大量转换,枚举解析为整数这一事实意味着对于未知类型,我们应该能够编写逻辑来处理整数,并且仅在需要时将其转换回特定的枚举


看起来您正试图使用值来允许单个设置属性表示多个可选状态

如果您:
有一个很好的SO讨论也涵盖了这一点:

让我们先看看
PenColor
enum:

[标志]
枚举铅笔颜色:int
{
无=0//0

Red=1这可能是一个XY问题。你能提供更多关于你试图通过这样做来完成什么的细节吗?(关于机制的信息更少,关于目标的信息更多。)虽然使用反射确实可以做到这一点,但也存在一些问题。例如,如果一个以上的枚举值映射到完全相同的数字会怎么样。这是绝对有效的。但即使如此,你也会得到一些非通用的疯狂的
enum
,这本质上只是实际的数字。所以在运行时这样做没有真正的好处。是吗建议您没有可用的枚举定义?或者您想将一个枚举强制转换为另一个枚举的等效字符串值?如何使用“double”"enum?或者说,除了整数enum之外的任何东西?enum只能基于8种整数类型中的一种。强制转换到
TestEnum
假设OP在编译时知道确切的类型,而他显然不知道。除此之外,您的答案与OPs问题中提到的链接中的答案完全相同。注释不应该出现吗蓝色的值是4吗?
string str = "Two";
object enumValue = null;

if (!Enum.TryParse(typeof(TestEnum), str, true, out enumValue))
    Enum.TryParse(typeof(TestEnum2), str, true, out enumValue))
PenColor cyan = PenColor.Green | PenColor.Blue;
int cyanInt = (int)PenColor.Green + (int)PenColor.Blue;
PenColor cyanCasted = (PenColor)cyanInt;