Gibt es eine Möglichkeit, Enums in VB.net zu kombinieren?Kombinieren Enums
Antwort
Ich glaube, was Sie wollen, ist ein Flag Typ Enum.
Sie müssen das Flags-Attribut oben in der Enumeration hinzufügen, und anschließend können Sie Enums mit dem Schlüsselwort 'Or' kombinieren.
So:
<Flags()> _
Enum CombinationEnums As Integer
HasButton = 1
TitleBar = 2
ReadOnly = 4
ETC = 8
End Enum
Hinweis: Die Zahlen auf der rechten Seite sind immer doppelt so groß (Potenzen von 2) - dies wird benötigt, um die einzelnen Fahnen zu trennen, die gesetzt wurden.
die gewünschten Flags Kombinieren Sie die Oder Schlüsselwort:
Dim settings As CombinationEnums
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly
Dies setzt TitleBar und Read-Only in die Enum
Um zu überprüfen, was festgelegt worden ist:
If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then
Window.TitleBar = True
End If
Wenn Sie über enum flags() verwenden, gibt es einen guten Artikel here.
Wenn ich Ihre Frage richtig verstehe, möchten Sie verschiedene Aufzählungstypen kombinieren. Also kann eine Variable einen Wert von einem von zwei verschiedenen Enum-Rechten speichern? Wenn Sie nach dem Speichern von zwei verschiedenen Werten eines Enum-Typs fragen, können Sie sich Dave Arkells Erklärung ansehen
Enums sind nur ganze Zahlen mit etwas syntaktischem Zucker. Wenn Sie also sicherstellen, dass es keine Überlappung gibt, können Sie sie kombinieren, indem Sie nach int umwandeln.
Es wird nicht für schönen Code obwohl. Ich versuche zu vermeiden, Enums die meiste Zeit zu verwenden. Normalerweise ist es nur eine Frage der Zeit, bis Sie wiederholte Fälle und andere unordentliche Antipattern zur Welt bringen.
Der Schlüssel zur Kombination Enum
s ist, um sicherzustellen, dass der Wert eine Potenz von zwei (1, 2, 4, 8, etc.), so dass Sie Bit-Operationen auf sich ausführen können (|=
&=
). Diese Enum
s können mit einem Flags
Attribut gekennzeichnet werden. Die Anchor
-Eigenschaft für Windows Forms-Steuerelemente ist ein Beispiel für ein solches Steuerelement. Wenn es als Flag gekennzeichnet ist, können Sie in Visual Studio Werte überprüfen, anstatt einen einzelnen im Drop-down-Menü des Eigenschafts-Designers auszuwählen.
Zweierpotenzen: nicht vergessen 1 = 2^0! –
Es ist auch immer schön, einen Wert von 0 für "none" anzugeben. – Nyerguds
Sie können die Flags verwenden um ein Enum so zu dekorieren, dass Sie das Enum kombinieren können:
<FlagsAttribute> _
Public Enumeration SecurityRights
None = 0
Read = 1
Write = 2
Execute = 4
Und dann sie wie so nennen (Klasse UserPriviltes):
Public Sub New (_
options As SecurityRights _
)
New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute)
Sie effektiv kombiniert bekommen (Bitmathematik), so dass der oben Benutzer sowohl Lese- und rundum Security in einer Phantasie Variable durchführen.
Um zu überprüfen, um zu sehen, ob der Benutzer ein Privileg Sie verwenden hat AND (mehr bitweise Mathematik) mit den Mitglieder ENUM-Wert mit dem der Enum-Wert überprüfen Sie überprüfen für:
//Check to see if user has Write rights
If (user.Privileges And SecurityRights.Write = SecurityRigths.Write) Then
//Do something clever...
Else
//Tell user he can't write.
End If
HTH, Tyler
Warum nicht ein BitVector32 verwenden? – Maslow
@abatiishchev Das ist nicht, was ich von dem Artikel bekommen habe. 'Nennen Sie den Nullwert von Flag-Enumerationen None' ...' der Wert muss immer bedeuten, dass alle Flags gelöscht sind'. Was es sagt ist, dass Sie nicht Null verwenden sollten, um einen zusätzlichen Zustand zu meinen, sondern dass Null keinen Zustand bedeutet (d. H. "Keiner"). –
-1. Sie haben die Verwendung von
- 1. Kombiniere enums C++
- 2. TryParsing Enums
- 3. deserializing enums
- 4. Kombinieren von Enums und Verwenden von Getter, um ein spezifisches Enum zurückzugeben
- 5. Java Enums - Switch Statements vs Besuchermuster auf Enums - Leistungsvorteile?
- 6. Java Enums: De-Serialisierung eines beliebigen Enums aus einer Datei
- 7. Enums in der DB oder NO Enums in der DB
- 8. Gibt es einen allgemeinen Ansatz für Enums in Enums?
- 9. Pythonic Design ohne Enums
- 10. C# enums als Funktionsparameter?
- 11. Pläne für erweiterbare Enums
- 12. Mappingtabelle Enums in NHibernate
- 13. Java: anonyme enums?
- 14. Frage zu Java enums
- 15. Alternative zu Verschachtelung enums
- 16. enums in C# - Aufgabe
- 17. C# enums als int
- 18. Vergleichen Enums in SpEL
- 19. C#: Enums in Interfaces
- 20. Unterstützt Dapper Enums?
- 21. Neo4j ignoriert Enums
- 22. Verkapselte Ereignisbehandlung mit Enums
- 23. Generierung von zufälligen enums
- 24. Zukunftsfähige Enums in 2.7?
- 25. 64-Bit Enums? C#
- 26. Enums in C++ erweitern?
- 27. Persisting Enums in Datenbanktabellen
- 28. PHP Rückgabetypen oder enums?
- 29. Elegant Parsing C# Enums
- 30. Unterstützt EF7 enums?
Große Antwort. Für den Fall, dass es nicht sofort offensichtlich ist, (wie Jonas Follesø in seiner Antwort darauf hinweist) - der Schlüssel dazu ist die Verwendung von Enum-Werten mit der Potenz 2 (1,2,4,8,16, usw.) – Andrew
Wenn Sie es sind mit .NET 4, dann können Sie die .HasFlag-Methode verwenden, um den Code ein wenig leichter zu lesen - Wenn settings.HasFlag (CombinationEnums.TitleBar) Dann bla bla –