在阅读某人的源代码时,我遇到了一个C#代码片段,其行为令我感到困惑。我开始问之前,这里是一个适合例子:Enum.GetValues()的内部工作()
枚举:
private enum Seasons
{
Spring,
Summer,
Autumn,
Winter
}
用法:
foreach(Seasons value in Enum.GetValues(typeof(Seasons)))
{
Console.WriteLine(String.Format("{0} {1}", value, (int) value));
}
输出看起来是这样的:
Spring 0
Summer 1
Autumn 2
Winter 3
我的问题:
这是如何在C#中工作的?返回值来自:
Enum.GetValues(typeof(Seasons))
是一个int数组,其值为0-3。 当它被铸造成季节 - 枚举时,我首先期望它失败。
我想,因为一个枚举是引用类型,上的String.Format() - 变量“值”,则ToString()方法将被调用,这将返回它的名字。但是,当转换为int时,它将使用该“已命名”值的Property并返回int值。
如果有人能告诉我这是如何在窗帘后面工作的,我很高兴。我浏览了文件,但无法解决。
谢谢...
谢谢大家对你的答案!
但是,如果可以请多说一点关于C#内部的东西,我会非常感激。在Java中,枚举将是一个真正的引用类型,在内存中,它将被视为指向存储整数的另一个内存平衡的引用。非常非常简单。
--------- -----------------
| | Reference |int Spring |
|Seasons|-------------> |int Summer |
| | |int Autumn |
--------- |int Winter |
-----------------
在我看来,在C#中编译器,将它转移到像公共常量(在我的情况下是一个int)。请不要扔石头...
System.Enum是一个引用类型,但是从它继承的类型是值类型。 – FSou1