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

C# 在C中设置运行时的枚举值#,c#,enums,runtime,C#,Enums,Runtime,是否有任何方法可以在运行时更改enum值 e、 我有以下类型 enum MyType { TypeOne, //=5 at runtime TypeTwo //=3 at runtime } 我希望在运行时将5设置为TypeOne,将3设置为TypeTwo枚举编译为常量静态字段,它们的值编译到程序集中,因此不可能更改它们。(它们的常量值甚至可以编译到引用它们的位置。) 例如,以这个枚举为例: enum foo { Value = 3 } 然后您可以获得字段及其信息,如

是否有任何方法可以在运行时更改
enum

e、 我有以下类型

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

我希望在运行时将5设置为
TypeOne
,将3设置为
TypeTwo
枚举编译为常量静态字段,它们的值编译到程序集中,因此不可能更改它们。(它们的常量值甚至可以编译到引用它们的位置。)

例如,以这个枚举为例:

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);
请参阅MSDN帮助

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

在Robust Programming(健壮编程)部分,与任何常量一样,对枚举的各个值的所有引用都在编译时转换为数值文本

因此,您需要重新调整
Enum
的概念,并相应地使用它


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

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

但是,您可能会重构代码以使用类:

public sealed class MyType
{
   public int TypeOne { get; set; }
   public int TypeTwo { get; set; }
}

...

var myType = new MyType { TypeOne  = 5, TypeTwo = 3 };

或者这个主题的变体。

这是不可能的。你为什么还要这个呢?+1我不理解那些倒下的选民。不要否决该问题,因为答案是“否”。向上投票,答案是“否”。不正确,它们被编译为常量,而不是静态字段。@DavidG我添加了示例代码。他们的工作方式和田地完全一样。常量也作为字段实现。