class Program
{
static void Main(string[] args)
{
String value = "Two";
Type enumType = typeof(Numbers);
Numbers number = (Numbers)Enum.Parse(enumType, value);
Console.WriteLine(Enum.Parse(enumType, value));
}
public enum Numbers : int
{
One,
Two,
Three,
Four,
FirstValue = 1
}
}
这是我在应用程序中使用的枚举的简化版本。某些枚举名称没有值的原因是因为我使用它们的名称作为参数进行 Enum.Parse 操作,而具有值的枚举名称是从 int 解析的。
如果您单步执行上面的代码并调查“number”变量,您会发现它实际上是“Two”,但控制台中的输出是“FirstValue”。现在我不明白为什么,你呢?
好吧,解决方案很简单——只需为无价值的枚举赋予一个值即可。但我还是很好奇。
我怀疑两者FirstValue
and Two
内部值为 1,因此系统不知道要输出哪个字符串。
public enum Numbers : int
{
One, // defaults to 0
Two, // defaults to 1
Three, // defaults to 2
Four, // defaults to 3
FirstValue = 1 // forced to 1
}
每个枚举值都有一个唯一的整数值,但并非每个整数值都有唯一的枚举值。
当你解析时"two"
,它在内部存储为整数1
。然后,当您尝试将其转换回字符串时,根据用于查找该名称的技术,您可能会得到"Two"
or "FirstValue"
。正如您所说,解决方案是为每个枚举值指定一个定义的整数值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)