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
このコンパイラの動作に興味があります。異なる列挙型間の操作が別の列挙型宣言で許可されているのに、他の場所では許可されていないのはなぜですか?