谁能解释一下?
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
关键字变成了object
,value
变量保存(装箱)类型的枚举值。
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/