在c#中动态更改enum的值
本文关键字:enum 的值 动态 | 更新日期: 2023-09-27 18:11:36
我有一个enum
public enum TestType:int
{
Aphasia = 2,
FocusedAphasia = 5
}
的值设置。我想将enum 'FocusedAphasia'的值从5更改为10。有没有人可以帮助我在运行时改变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
}