Динамически изменить значение перечисления в C #? - PullRequest
2 голосов
/ 19 октября 2011

У меня есть enum

    public enum TestType:int
   {
      Aphasia = 2,
      FocusedAphasia = 5
   }

с установленными значениями.Я хочу изменить значение enum 'FocusedAphasia' с 5 на 10. Может ли кто-нибудь помочь мне изменить значение enum во время выполнения

Ответы [ 4 ]

10 голосов
/ 19 октября 2011

Вы не можете изменять перечисления во время выполнения. Я не уверен, зачем тебе это нужно, но в любом случае это невозможно. Использование переменной будет альтернативой.

6 голосов
/ 19 октября 2011

Вы не можете сделать это, это строго типизированное значение , если хотите.

Элементы перечисления доступны только для чтения, и их изменение во время выполнения невозможно и не желательно.

То, что может вас устроит, является расширением перечисления, чтобы предоставить новое значение для использования с новыми функциями и еще много чего, например:

public enum TestType:int
{
    Aphasia = 2,
    FocusedAphasia = 5
    SomeOtherAphasia = 10
}

Не совсем понимая, что именно вы хотите сделать, я не могу предложить вам многое другое.

2 голосов
/ 19 октября 2011

Ну, на самом деле вы можете.Скажем, у вас есть сборка (dll) с оригинальным TestType.Вы можете выгрузить эту сборку (это несколько сложно), переписать сборку с новым TestType и перезагрузить его.

Однако вы не можете изменить тип существующих переменных, поскольку они должны быть удалены досборка может быть выгружена.

0 голосов
/ 02 ноября 2018

Ну, этот вопрос 7 лет, пока я пишу свой ответ.Я все еще хочу написать это, может быть, это будет кому-то полезно позже.

Изменение значений перечисления во время выполнения невозможно, но есть способ поиграться, приведя переменную int к enum и определив эти целыесо значениями в словаре, как показано ниже:

// Define enum TestType without values
enum TestType{}
// Define a dictionary for enum values
Dictionary<int,string> d = new Dictionary<int,string>();
void Main()
{
    int i = 5;
    TestType s = (TestType)i;
    TestType e = (TestType)2;

    // Definging enum int values with string values
    d.Add(2,"Aphasia");
    d.Add(5,"FocusedAphasia");

    // Results:
    Console.WriteLine(d[(int)s]); // Result: FocusedAphasia
    Console.WriteLine(d[(int)e]); // Result: Aphasia
}

Таким образом, у вас есть динамический словарь для значений перечисления без каких-либо записанных внутри него.Если вам нужно какое-либо другое значение для перечисления, вы можете создать метод для его добавления:

public void NewEnumValue(int i, string v)
{
    try
    {
        string test = d[i];
        Console.WriteLine("This Key is already assigned with value: " + 
                           test);
    }
    catch
    {
        d.Add(i,v);
    }
}

Итак, ваш последний используемый код должен быть таким:

// Define enum TestType without values
enum TestType{}
// Define a dictionary for enum values
Dictionary<int,string> d = new Dictionary<int,string>();

public void NewEnumValue(int i, string v)
{
    try
    {
        string test = d[i];
        Console.WriteLine("This Key is already assigned with value: " + 
                           test);
    }
    catch
    {
        d.Add(i,v);
        Console.WriteLine("Addition Done!");
    }
}

void Main()
{
    int i = 5;
    TestType s = (TestType)i;
    TestType e = (TestType)2;

    // Definging enum int values with string values

    NewEnumValue(2,"Aphasia");
    NewEnumValue(5,"FocusedAphasia");
    Console.WriteLine("You will add int with their values; type 0 to " +
                      "exit");
    while(true)
    {
        Console.WriteLine("enum int:");
        int ii = Convert.ToInt32(Console.ReadLine());
        if (ii == 0) break;
        Console.WriteLine("enum value:");
        string v = Console.ReadLine();
        Console.WriteLine("will try to assign the enum TestType with " + 
                          "value: " + v + " by '" + ii + "' int value.");
        NewEnumValue(ii,v);
    }

    // Results:
    Console.WriteLine(d[(int)s]); // Result: FocusedAphasia
    Console.WriteLine(d[(int)e]); // Result: Aphasia
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...