Установка значения enum во время выполнения в C#

есть ли способ, что я могу изменить enum значения во время выполнения?

e.g у меня есть следующий тип

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

Я хочу во время выполнения установить 5 в TypeOne и 3 TypeTwo.

3 ответов


просто обратитесь к справке MSDN здесь

  • тип перечисления (также называется перечислением) обеспечивает эффективный способ, чтобы определить набор именованных целочисленных констант, которые могут быть присвоены переменной.

и здесь

В разделе "надежное программирование" - как и в любой константе, все ссылки на отдельные значения перечисления преобразуются в числовые литералы при компиляции время.

поэтому вам нужно перестроить свою идею Enum и используйте его соответственно.

ответить на ваш вопрос-нет, это невозможно.


как указывали другие, ответ-нет.

однако вы могли бы реорганизовать код, чтобы использовать класс вместо этого:

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

...

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

или вариации на эту тему.


перечисления компилируются как постоянные статические поля, их значения компилируются в сборку, поэтому нет, их невозможно изменить. (Их постоянные значения могут быть даже скомпилированы в места, где вы ссылаетесь на них.)

например, возьмите это перечисление:

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);