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
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在应用程序中使用的枚举的简化版本.为什么某些枚举名称没有值的原因是因为我使用其名称作为参数执行Enum.Parse,而具有值的值则从int解析.
如果您单步执行上面的代码并调查'number'变量,您会看到它实际上是'Two',但控制台中的输出是'FirstValue'.此时我看不出原因,是吗?
好的,解决方案很简单 - 只需给无价值的枚举值.但我仍然很好奇.
Ecl*_*pse 10
我怀疑,这两个FirstValue
并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
}
Run Code Online (Sandbox Code Playgroud)
每个枚举值都有一个唯一的整数值,但每个整数值都没有唯一的枚举值.
解析时"two"
,它将作为整数在内部存储1
.然后,当您尝试将其转换回字符串时,根据用于查找该名称的技术,您可以获得"Two"
或者"FirstValue"
.正如您所说,解决方案是为每个枚举值赋予一个定义的整数值.
归档时间: |
|
查看次数: |
1237 次 |
最近记录: |