C# 编译器允许在另一个枚举类型声明中的不同枚举类型之间进行操作,如下所示:
public enum VerticalAnchors
{
Top=1,
Mid=2,
Bot=4
}
public enum HorizontalAnchors
{
Lef=8,
Mid=16,
Rig=32
}
public enum VisualAnchors
{
TopLef = VerticalAnchors.Top | HorizontalAnchors.Lef,
TopMid = VerticalAnchors.Top | HorizontalAnchors.Mid,
TopRig = VerticalAnchors.Top | HorizontalAnchors.Rig,
MidLef = VerticalAnchors.Mid | HorizontalAnchors.Lef,
MidMid = VerticalAnchors.Mid | HorizontalAnchors.Mid,
MidRig = VerticalAnchors.Mid | HorizontalAnchors.Rig,
BotLef = VerticalAnchors.Bot | HorizontalAnchors.Lef,
BotMid = VerticalAnchors.Bot | HorizontalAnchors.Mid,
BotRig = VerticalAnchors.Bot | HorizontalAnchors.Rig
}
但在方法代码中禁止它们,即操作:
VerticalAnchors.Top | HorizontalAnchors.Lef;
标记有此错误:
运算符“|” 不能应用于“VerticalAnchors”和“HorizontalAnchors”类型的操作数。
当然,有一个解决方法:
(int)VerticalAnchors.Top | (int)HorizontalAnchors.Lef
我对这种编译器行为很好奇。为什么在另一个枚举声明中允许不同枚举类型之间的操作,但在其他地方不允许?