Компилятор С# позволяет выполнять операции между различными типами перечислений в другой декларации типа перечисления, например:
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
Мне интересно об этом поведении компилятора. Почему операции между различными типами перечислений разрешены в другой декларации перечисления, но не в другом месте?