Setting enum value at runtime in C#

此生再无相见时 提交于 2019-12-30 17:22:49

问题


Is there any way that I can change enum values at run-time?

e.g I have following type

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

I want at runtime set 5 to TypeOne and 3 to TypeTwo.


回答1:


Just refer to MSDN help HERE

  • An enumeration type (also named an enumeration or an enum) provides an efficient way to define a set of named integral constants that may be assigned to a variable.

Also HERE

In the Robust Programming Section - Just as with any constant, all references to the individual values of an enum are converted to numeric literals at compile time.

So you need to realign your idea of Enum and use it accordingly.

To answer your question - No it is not possible.




回答2:


As others have pointed out, the answer is no.

You could however probably refactor your code to use a class instead:

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

...

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

or variations on that theme.




回答3:


Enums are compiled as constant static fields, their values are compiled into you assembly, so no, it's not possible to change them. (Their constant values may even be compiled into places where you reference them.)

Eg take this enum:

enum foo
{
    Value = 3
}

Then you can get the field and its information like this:

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


来源:https://stackoverflow.com/questions/26827461/setting-enum-value-at-runtime-in-c-sharp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!