VB.net에서 Enum을 결합하는 방법이 있습니까?Enums 결합하기
답변
나는 당신이 원하는 것이 깃발 유형 열거 형이라고 믿습니다.
열거 형의 맨 위에 Flags 특성을 추가해야합니다. 그러면 열거 형을 'Or'키워드와 결합 할 수 있습니다. 이처럼
:
<Flags()> _
Enum CombinationEnums As Integer
HasButton = 1
TitleBar = 2
ReadOnly = 4
ETC = 8
End Enum
참고 : 오른쪽 숫자는 항상 두 배 큰 (2의 거듭 제곱)입니다 -이 설정되어있는 개별 플래그를 분리 할 수 있도록 필요합니다.
는 OR 키워드를 사용하여 원하는 플래그를 결합 :
설정되어 있는지 확인하려면 열거에
Dim settings As CombinationEnums
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly
이 제목 표시 줄 및 읽기 전용으로 설정을 :
이If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then
Window.TitleBar = True
End If
enum flags()를 사용하는 경우 유용한 문서 here이 있습니다.
질문을 올바르게 이해하면 다른 열거 형을 결합하고 싶습니다. 따라서 하나의 변수는 두 개의 서로 다른 열거 형 중 하나의 값을 저장할 수 있습니까? 하나의 열거 형의 두 가지 다른 값을 결합하여 저장하는 방법에 대해 묻는다면 Dave Arkell의 설명을 볼 수 있습니다.
열거 형은 일부 구문 설탕과 정수입니다. 따라서 중복이 없는지 확인하려면 int로 캐스팅하여 결합 할 수 있습니다.
예쁜 코드는 만들 수 없습니다. 나는 enum을 사용하는 것을 피하려고 노력한다. 일반적으로 enum이 코드에서 번식하게하면 반복되는 case 문과 다른 지저분한 반 패턴이 생기기 전에 시간 문제 일뿐입니다.
Enum
의 조합 키는 비트 연산 (|=
&=
)을 수행 할 수 있도록 값이 2의 제곱수 (1, 2, 4, 8 등)인지 확인하는 것입니다. 이러한 Enum
은 Flags
속성으로 태그를 지정할 수 있습니다. Windows Forms 컨트롤의 Anchor
속성은 이러한 컨트롤의 예입니다. 플래그로 표시된 경우 Visual Studio에서는 속성 디자이너의 드롭 다운에서 하나를 선택하는 대신 값을 확인할 수 있습니다.
2의 제곱수 : 1 = 2^0을 잊지 마세요! –
"none"에 0 값을 제공하는 것도 좋습니다. – Nyerguds
당신은있는 FlagsAttribute 사용할 수 있습니다 열거 형을 조합하여 Enum을 결합하게합니다.
<FlagsAttribute> _
Public Enumeration SecurityRights
None = 0
Read = 1
Write = 2
Execute = 4
그리고 그렇게 (클래스 UserPriviltes)처럼 전화 :
Public Sub New (_
options As SecurityRights _
)
New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute)
위의 사용자가 모두 읽기를 가지고 있으며, 모두 하나의 공상 SecurityRights 변수에 다닐 실행하도록 효과적으로 (비트 연산) 결합되는
.
//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, 타일러 :
하면 사용자는 당신이 확인하고있는 사용자에게 열거 값을 열거 값을 확인하기 위해 사용 권한 및 (더 비트 수학)이 있는지 확인하려면
BitVector32를 사용하지 않는 이유는 무엇입니까? – Maslow
@abatishchev 기사에서 얻은 내용이 아닙니다. '플래그 열거 형의 제로 값에 이름을 지정하십시오. 없음 '...'값은 항상 모든 플래그가 지워 져야 함을 의미합니다. ' 그것이 말하는 것은 0을 사용하여 어떤 추가 상태를 의미하지 말아야한다는 것입니다. 0은 상태가 없음을 의미합니다 (즉, '없음'). –
-1.
- 1. NHibernate와 Enums
- 2. PersistenceSpecification 및 Enums
- 3. Enums 목록에 매핑 하시겠습니까?
- 4. WCF 버전 관리 Enums
- 5. Entity Framework - WCF - Enums?
- 6. ListView and enums
- 7. C# enums/reflection
- 8. C# enums as int
- 9. NHibernate의 매핑 테이블 Enums
- 10. 자바 enums : 개념적 의심
- 11. NoSql : Enums vs Strings
- 12. Android Java : enums 사용
- 13. Django보기 결합하기
- 14. .net Enums blittable types입니까? (마샬링)
- 15. 레일즈 모델과 데이터베이스에서 상수 enums
- 16. C# int, Int32 및 enums
- 17. 자바 스크립트 파일 결합하기
- 18. 자식과 모노톤을 결합하기
- 19. php - json을 json_decode와 결합하기
- 20. 두 자원 결합하기 PHP
- 21. 런타임시 함수 몸체 결합하기
- 22. drawRect를 다른 UIView와 결합하기
- 23. PHP에서 배열 결합하기
- 24. Java에서 여러 이미지 결합하기
- 25. mod_access와 mod_auth 결합하기
- 26. Unix에서 에코와 고양이를 결합하기
- 27. 조건부로 PHP 배열 결합하기
- 28. 로테이션과 번역 결합하기
- 29. 하나의보기에 OpenGL 렌더링 결합하기
- 30. jQuery/JavaScript 함수 결합하기
좋은 답변입니다. (Jonas Follesø가 그의 답변에서 지적한대로)이 키의 핵심은 Enum 값을 2의 제곱 (1,2,4,8,16 등)으로 사용하는 것입니다. – Andrew
.NET 4를 사용하면 .HasFlag 메서드를 사용하여 코드를 좀 더 읽기 쉽게 만들 수 있습니다. - settings.HasFlag (CombinationEnums.TitleBar) 그렇다면 –