在c#中动态更改enum的值

本文关键字:enum 的值 动态 | 更新日期: 2023-09-27 18:11:36

我有一个enum

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

的值设置。我想将enum 'FocusedAphasia'的值从5更改为10。有没有人可以帮助我在运行时改变enum的值

在c#中动态更改enum的值

不能在运行时更改枚举。我不知道你为什么需要这么做,但无论如何,这是不可能的。使用变量是另一种选择。

你不能这样做,它是一个强类型值,如果你喜欢的话。

枚举的元素是只读的,在运行时更改它们是不可能的,也不希望这样做。

可能适合您的是enum的扩展,以暴露用于新特性和其他内容的新值,例如:

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

我不太清楚你到底想做什么,所以我不能给你更多的建议。

其实你可以。假设您有一个具有原始TestType的程序集(dll)。您可以卸载该程序集(这有点复杂),用新的TestType重写该程序集并重新加载它。

但是,您不能更改现有变量的类型,因为必须在卸载程序集之前处理这些变量。

好吧,这个问题已经过去7年了,而我正在写我的答案。我还是想把它写下来,也许以后会对别人有用。

在运行时更改枚举值是不可能的,但有一种方法可以通过将int变量强制转换为enum,并在字典中定义这些int及其值,如下所示:

// 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
}