Die C# Compiler ermöglichen Operationen zwischen verschiedenen Aufzählungstypen in einer anderen Aufzählungstyp Erklärung, wie folgt aus:Warum sind Operationen zwischen verschiedenen Enum-Typen in einer anderen Enum-Deklaration zulässig, aber nicht anderswo?
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
}
aber verbietet sie innerhalb Methodencode, dh die Operation:
VerticalAnchors.Top | HorizontalAnchors.Lef;
mit diesem Fehler gekennzeichnet ist :
Operator '|' cannot be applied to operands of type 'VerticalAnchors' and 'HorizontalAnchors'.
Es gibt eine Abhilfe, natürlich:
Ich bin neugierig auf dieses Compiler-Verhalten. Warum sind Operationen zwischen verschiedenen Aufzählungstypen in einer anderen Aufzählung zulässig, aber nicht anderswo?
Ich denke, Sie wollen '' '' anstelle von '&'. –
Das offensichtlicherste Beispiel dafür, wie der Initialisierungsausdruck implizit konvertiert wird, ist "Top = 1". Sie können das nicht in einer Anweisung schreiben, ohne einen Cast zu verwenden. –
Überraschend. Sie könnten ihre Fehlermeldung in _Operator ändern '&' kann nur bei der Deklaration einer Enumerationskonstante auf Operanden vom Typ 'VerticalAnchors' und 'HorizontalAnchors' angewendet werden._ –