c# - 为什么 Enum.GetValues() 在使用 "var"时返回名称?

标签 c# enums anonymous-types

谁能解释一下?

alt text http://www.deviantsart.com/upload/g4knqc.png

using System;

namespace TestEnum2342394834
{
    class Program
    {
        static void Main(string[] args)
        {
            //with "var"
            foreach (var value in Enum.GetValues(typeof(ReportStatus)))
            {
                Console.WriteLine(value);
            }

            //with "int"
            foreach (int value in Enum.GetValues(typeof(ReportStatus)))
            {
                Console.WriteLine(value);
            }

        }
    }

    public enum ReportStatus
    {
        Assigned = 1,
        Analyzed = 2,
        Written = 3,
        Reviewed = 4,
        Finished = 5
    }
}

最佳答案

Enum.GetValues 声明为返回 Array
它返回的数组包含作为 ReportStatus 值的实际值。

因此,var 关键字变成了objectvalue 变量保存(装箱)类型的枚举值。
Console.WriteLine 调用解析为采用 object 并对该对象调用 ToString() 的重载,对于枚举,它返回姓名。

当您遍历 int 时,编译器会将值隐式转换为 int,并且 value 变量保持正常(和非盒装)int 值。
因此,Console.WriteLine 调用解析为采用 int 并打印它的重载。

如果将 int 更改为 DateTime(或任何其他类型),它仍会编译,但会在运行时抛出 InvalidCastException .

关于c# - 为什么 Enum.GetValues() 在使用 "var"时返回名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3213432/

相关文章:

c# - 如何关闭某个应用程序生成的 MessageBox

c - 错误 C2365 : redefinition of enum and Error 2086 redefinition

c# - 为什么 C# 不允许匿名转换为对象?

c# - 匿名类型的编译器优化

c# - 在 Monomac/Xamarin C# 中创建无窗口菜单栏图标应用程序

c# - 如何将数据从 View(javascript) 传输到 MVC 中的模型

c# - Surface 上的 KitaroDB

c++ - 访问在类外声明的作用域枚举

java - 如何将我的枚举类返回设置为 ArrayList Java

c# - 如何将这一行转换成 vb.net