鉴于此代码:
public enum Enum1
{
ONE,
TWO
}
public enum Enum2
{
A,
B
}
Run Code Online (Sandbox Code Playgroud)
此代码返回ONE,TWO:
foreach (Enum1 e in Enum.GetValues(typeof(Enum1)))
{
Console.WriteLine(e);
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码,而不是失败(因为Enum2 e与之一起使用typeof(Enum1)),返回A,B:
foreach (Enum2 e in Enum.GetValues(typeof(Enum1)))
{
Console.WriteLine(e);
}
Run Code Online (Sandbox Code Playgroud)
这是为什么?
因为在封面下Enums只是整数 - 第二个返回值Enum1,但实际上这些值只是0和1.当您将这些值转换为类型时,Enum2这些值仍然有效并且对应于值"A"和"B".
因为枚举的值是隐式整数:
public enum Enum1
{
ONE = 0,
TWO = 1
}
public enum Enum2
{
A = 0,
B = 1
}
Run Code Online (Sandbox Code Playgroud)
Enum1的值被隐式转换为整数,然后转换为Enum2的值.如果您重新定义Enum1如下...
public enum Enum1
{
ONE = 0,
TWO = 1,
THREE = 2,
}
Run Code Online (Sandbox Code Playgroud)
......然后会的 失败 不返回"A,B",因为Enum2中没有值为整数值2
| 归档时间: |
|
| 查看次数: |
2004 次 |
| 最近记录: |