对我来说很有趣,为什么这段代码不会给出异常,而12356将输出到控制台? 这个行为枚举是什么意思?
enum Dummy { D1 = 123, D2 = 1234, D3 }
class Program
{
static void Main(string[] args)
{
Dummy d = (Dummy)12356;
Console.WriteLine((int)d);
Console.ReadKey();
}
}
这是错误还是功能?
答案 0 :(得分:1)
这是错误还是功能?
一项功能,尽管当代码无法按预期工作时,它可能会带您进入奇怪的情况。
例如,您可以合并枚举值,例如:
enum Dummy { D1 = 1, D2 = 2, D3 = 4 }
Dummy v = Dummy.D1 | Dummy.D2;
此处的后备值为3。
您可以检查以下任一值:
bool isD1 = (v & Dummy.D1) == Dummy.D1;
您可以像这样检查枚举的单值有效性:
Dummy v = Dummy.D1;
bool isValid = Enum.IsDefined(typeof(Dummy), v);
答案 1 :(得分:0)
这是设计使然,但不鼓励使用,如the documentation中所述:
可以将任意整数值分配给MeetingDay。对于 例如,以下代码行不会产生错误:MeetingDay = (天)42.但是,您不应这样做,因为隐式 期望枚举变量将仅包含值之一 由枚举定义。为一个变量赋一个任意值 枚举类型会带来很高的错误风险。
您始终可以使用IsDefined
检查是否为枚举类型定义了给定值:
Console.WriteLine(Enum.IsDefined(typeof(Dummy), 123)); //True
Console.WriteLine(Enum.IsDefined(typeof(Dummy), 123456)); //False