在C#中的运行时设置枚举值

本文关键字:设置 枚举 运行时 | 更新日期: 2023-09-27 18:29:41

有什么方法可以在运行时更改enum值吗?

我有以下类型的

enum MyType
{
   TypeOne, //=5 at runtime 
   TypeTwo  //=3 at runtime
}

我希望在运行时将5设置为TypeOne,将3设置为TypeTwo

在C#中的运行时设置枚举值

正如其他人所指出的,答案是否定的。

然而,您可能会重构代码以使用一个类:

public sealed class MyType
{
   public int TypeOne { get; set; }
   public int TypeTwo { get; set; }
}
...
var myType = new MyType { TypeOne  = 5, TypeTwo = 3 };

或该主题的变体。

请参阅MSDN帮助HERE

  • 枚举类型(也称为枚举或枚举)提供了一种有效的方法来定义可以分配给变量的一组命名积分常数

也在这里

在鲁棒编程部分-与任何常量一样,对枚举的各个值的所有引用都会在编译时转换为数字文本。

因此,你需要重新调整你对Enum的想法,并相应地使用它。

回答你的问题-不,这是不可能的。

枚举被编译为常量静态字段,它们的值被编译到您的程序集中,所以不,不可能更改它们。(它们的常数值甚至可能被编译到你引用它们的地方。)

举个例子:

enum foo
{
    Value = 3
}

然后你可以得到这样的字段及其信息:

var field = typeof(foo).GetField("Value", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
Console.WriteLine(field.GetValue(null));
Console.WriteLine(field.Attributes);