gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:16:10 25 4
gpt4 key购买 nike

谁能解释一下?

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com