我有一个枚举
public enum TestType:int
{
Aphasia = 2,
FocusedAphasia = 5
}
设置值。我想将枚举'FocusedAphasia'的值从5更改为10.任何人都可以帮助我在运行时更改枚举的值
答案 0 :(得分:10)
您无法在运行时更改枚举。我不确定你为什么需要,但无论如何都不可能。使用变量将是另一种选择。
答案 1 :(得分:6)
如果你愿意,你不能这样做,它是强类型值。
枚举的元素是只读的,在运行时更改它们是不可能的,也不是理想的。
可能适合你的是枚举的扩展,以公开新值以用于新功能和诸如此类的东西,例如:
public enum TestType:int
{
Aphasia = 2,
FocusedAphasia = 5
SomeOtherAphasia = 10
}
对于你想要做的事情并没有完全了解,我不能提出太多建议。
答案 2 :(得分:2)
但是,您无法更改现有变量的类型,因为在卸载程序集之前必须先处理这些变量。
答案 3 :(得分:0)
嗯,在我写答案时,这个问题已经有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
}