小编Dan*_*tes的帖子

Enum.GetValues()的内部工作

在阅读某人的源代码时,我遇到了一个C#片段,其行为让我感到困惑.在我开始询问之前,这是一个改编的例子:

枚举:

private enum Seasons
{
    Spring,
    Summer,
    Autumn,
    Winter
}
Run Code Online (Sandbox Code Playgroud)

用法:

foreach(Seasons value in Enum.GetValues(typeof(Seasons)))
{
   Console.WriteLine(String.Format("{0} {1}", value, (int) value));
}
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

Spring 0
Summer 1
Autumn 2
Winter 3
Run Code Online (Sandbox Code Playgroud)

我的问题:

这在C#中如何工作?来自的返回值:

Enum.GetValues(typeof(Seasons))
Run Code Online (Sandbox Code Playgroud)

是一个填充值0-3的int数组.当它被送到季节 - 枚举时,我首先期望它失败.

我认为由于枚举是一个引用类型,在String.Format() - 参数"value"上,将调用ToString()方法,该方法将返回其名称.但是当转换为int时,它将在"named"值上使用Property并返回int值.

如果有人能告诉我窗帘背后是如何工作的,我会很高兴的.我查看了文档,但还是无法解决.

谢谢...


谢谢大家的答案!

但是......我真的很感激,如果有人可以再说一些关于C#内部的话.在Java中,枚举将是一个真正的引用类型,并且在内存中,它将被视为指向存储整数的另一个内存平衡的引用.非常非常简化.

---------               -----------------
|       |  Reference    |int     Spring |
|Seasons|-------------> |int     Summer |
|       |               |int     Autumn |
---------               |int     Winter |
                        -----------------
Run Code Online (Sandbox Code Playgroud)

在我看来,在C#编译器中,将它转换为类似公共const的东西(在我的例子中是一个int).请不要扔石头......

c# enums

3
推荐指数
1
解决办法
1196
查看次数

标签 统计

c# ×1

enums ×1