Czy istnieje sposób łączenia Enums w VB.net?Łączenie wyliczeń
Odpowiedz
Wierzę, że to, czego chcesz, to wyliczenie typu flagi.
Musisz dodać atrybut Flags u góry wyliczenia, a następnie połączyć wyrazy z słowem kluczowym "Or".
Jak to:
<Flags()> _
Enum CombinationEnums As Integer
HasButton = 1
TitleBar = 2
ReadOnly = 4
ETC = 8
End Enum
Uwaga: Liczby po prawej stronie są zawsze dwa razy większy (potęgi 2) - jest to potrzebne, aby móc oddzielić poszczególne flagi, które zostały określone.
Kombajny żądane flagi za pomocą słowa kluczowego, czyli
Dim settings As CombinationEnums
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly
Ustawia pasku tytułowym i tylko do odczytu do wyliczenia
Aby sprawdzić, co zostało ustawione:
If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then
Window.TitleBar = True
End If
Jeśli podejmujesz temat używania znaczników enum(), istnieje dobry artykuł here.
Jeśli dobrze rozumiem twoje pytanie, chcesz połączyć różne typy wyliczeniowe. Tak więc jedna zmienna może przechowywać wartość z jednego z dwóch różnych praw wyliczeniowych? Jeśli pytasz o przechowywanie łączące dwie różne wartości jednego typu wyliczeniowego, możesz spojrzeć na wyjaśnienia Dave'a Arkell'a:
Wyliczenia są po prostu liczbami całkowitymi z pewnymi cukrami syntaktycznymi. Jeśli więc upewnisz się, że nie ma nakładania, możesz je połączyć, przesyłając do int.
Nie spowoduje to jednak ładnego kodu. Staram się unikać używania wyrażeń przez większość czasu. Zwykle, jeśli pozwolisz, aby wyliczenia były w twoim kodzie, to tylko kwestia czasu, zanim narodzą się powtarzające się przypadki i inne niechlujne antypatie.
Kluczem do kombinacji Enum
s jest, aby upewnić się, że wartość jest potęgą liczby dwa (1, 2, 4, 8, etc.), dzięki czemu można wykonywać operacje bitowe na nich (|=
&=
). Te Enum
s można oznaczyć za pomocą atrybutu Flags
. Właściwość Anchor
w formantach Windows Forms jest przykładem takiej kontroli. Jeśli jest oznaczony flagą, Visual Studio pozwoli ci sprawdzić wartości zamiast wybierać jedną z rozwijanej listy w projektancie właściwości.
Potęga dwóch: nie zapomnij 1 = 2^0! –
Zawsze dobrze jest podać wartość 0 dla "none". – Nyerguds
Można użyć FlagsAttribute ozdobić taką Enum, która pozwoli ci połączyć Enum:
<FlagsAttribute> _
Public Enumeration SecurityRights
None = 0
Read = 1
Write = 2
Execute = 4
a następnie wywołać je jak SO (UserPriviltes klasa):
Public Sub New (_
options As SecurityRights _
)
New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute)
one skutecznie się łączyć (bit matematyka), tak że powyższy użytkownik ma zarówno odczytu i wykonywania wszystkich nosić w jednej zmiennej fantazyjne SecurityRights.
Aby sprawdzić, czy użytkownik ma przywilej używać AND (więcej bitowe matematyki), aby sprawdzić użytkownikom wartość enum z wartości Enum jesteś sprawdzanie:
//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
dlaczego nie użyć BitVector32? – Maslow
@abatishchev To nie jest to, co otrzymałem z artykułu. 'Wpisz nazwę zerową wyliczeń flag None' ...' wartość musi zawsze oznaczać, że wszystkie flagi zostały wyczyszczone'. Mówi się, że nie należy używać zera do określenia jakiegoś dodatkowego stanu, a raczej zero oznacza brak stanu (tj. "Brak"). –
-1. Zniszczyłeś użycie
- 1. Łączenie ciągów stałych i wyliczeń
- 2. Łączenie wyliczeń i używanie gettera w celu zwrócenia określonego wyliczenia
- 3. Serializacja XML wyliczeń
- 4. Jak uzyskać liczbę wyliczeń?
- 5. Rozszerz typy wyliczeń w F #
- 6. Jak używać wyliczeń w Oracle?
- 7. PostgreSQL INSERT do tablicy wyliczeń
- 8. Używanie wyliczeń z klasy (C++)
- 9. Graphql Wiele wyliczeń w zapytaniu
- 10. Łączenie wiosenne Łączenie
- 11. Używanie wielu wyliczeń NSUInteger jako parametru metody
- 12. Najlepszy sposób obsługi "Rozszerzalnych wyliczeń" w adnotacjach?
- 13. Klient aplikacji API Azure nie generuje wyliczeń
- 14. Problem z konwertowaniem wyliczeń w C++ \ CLI
- 15. Jak mieć przyjazne nazwy dla wyliczeń?
- 16. Połączyć wiele wyliczeń do głównej listy wyliczeniowej
- 17. Używanie wyliczeń jako niestandardowych atrybutów XML
- 18. Generowanie 3 wyliczeń w jednym typie
- 19. Uzyskiwanie wyliczeń do wyświetlania po stronie klienta
- 20. Kod EF5 Pierwsze tablice wyliczeń i wyszukiwania
- 21. Dostęp do standardowych wyliczeń słów VBA
- 22. Nazywanie wyliczeń w Javie: pojedyncza lub mnoga?
- 23. Typy wyliczeń w node.js natywnym addonie
- 24. Demontaż wyliczeń bitu flag w SQL Server
- 25. Delphi for..in ustawia kolejność wyliczeń pętli
- 26. przekazywanie wyliczeń przez odniesienie w java
- 27. Czy instancje wyliczeń są statyczne domyślnie?
- 28. Jak utworzyć InstanceDescriptor dla listy wyliczeń?
- 29. Łączenie wzorów
- 30. Łączenie krotek
Świetna odpowiedź. W przypadku, gdy nie jest to od razu oczywiste (jak zauważa Jonas Follesø w swojej odpowiedzi) - kluczem do tego jest użycie wartości Enum do potęgi 2 (1,2,4,8,16, itp.). – Andrew
Jeśli jesteś za pomocą .NET 4, możesz użyć metody .HasFlag, aby kod był trochę łatwiejszy do odczytania - Jeśli ustawienia.HasFlag (CombinationEnums.TitleBar) Następnie bla bla –