VB에서 String ENUM을 정의합니다.그물
저는 제 프로젝트에 윈도우 애플리케이션을 사용하고 있습니다.문자열 열거형을 정의하고 프로젝트에서 사용해야 하는 상황이 있습니다.
예.
Dim PersonalInfo As String = "Personal Info"
Dim Contanct As String = "Personal Contanct"
Public Enum Test
PersonalInfo
Contanct
End Enum
이제 저는 변수 개인 정보 및 계약의 가치를 "개인 정보" 및 "개인 연락"으로 원합니다.
ENUM을 사용하여 이 값을 얻으려면 어떻게 해야 합니까?또는 다른 방법으로 할 수 있습니다.
잘 부탁드립니다...
가 아닌 값의 경우에는 정가아 값경의 우닌수Const
순식간에Structure
(또는)Class
)을 대신 사용할 수 있습니다.
Structure Test
Const PersonalInfo = "Personal Info"
Const Contanct = "Personal Contanct"
End Structure
니면아로.Module
를 사용하지 않고 직접 액세스할 수 있습니다.Test.
표시된 항목:
Module Test
Public Const PersonalInfo = "Personal Info"
Public Const Contanct = "Personal Contanct"
End Module
경우에 따라 변수 이름을 값으로 사용할 수 있습니다.
Enum Test
Personal_Info
Personal_Contanct
End Enum
Dim PersonalInfo As String = Test.Personal_Info.ToString.Replace("_"c, " "c)
' or in Visual Studio 2015 and newer:
Dim Contanct As String = NameOf(Test.Personal_Contanct).Replace("_"c, " "c)
새 유형을 생성할 수 있습니다.
''' <completionlist cref="Test"/>
Class Test
Private Key As String
Public Shared ReadOnly Contact As Test = New Test("Personal Contanct")
Public Shared ReadOnly PersonalInfo As Test = New Test("Personal Info")
Private Sub New(key as String)
Me.Key = key
End Sub
Public Overrides Function ToString() As String
Return Me.Key
End Function
End Class
사용할 때는 일종의 열거형처럼 보입니다.
Sub Main
DoSomething(Test.Contact)
DoSomething(Test.PersonalInfo)
End Sub
Sub DoSomething(test As Test)
Console.WriteLine(test.ToString())
End Sub
출력:
연락처
정보 제공
태그 지정을 사용하는 것은 어떻습니까?다음과 같은 것:
Public Enum MyEnum
<StringValue("Personal Contact")>Contact
<StringValue("My PersonalInfo")>PersonalInfo
End Enum
StringValue 속성은 다음과 같이 작성해야 합니다.
Public Class StringValueAttribute
Inherits Attribute
Public Property Value As String
Public Sub New(ByVal val As String)
Value = val
End Sub
End Class
꺼내려면:
Public Function GetEnumByStringValueAttribute(value As String, enumType As Type) As Object
For Each val As [Enum] In [Enum].GetValues(enumType)
Dim fi As FieldInfo = enumType.GetField(val.ToString())
Dim attributes As StringValueAttribute() = DirectCast(fi.GetCustomAttributes(GetType(StringValueAttribute), False), StringValueAttribute())
Dim attr As StringValueAttribute = attributes(0)
If attr.Value = value Then
Return val
End If
Next
Throw New ArgumentException("The value '" & value & "' is not supported.")
End Function
Public Function GetEnumByStringValueAttribute(Of YourEnumType)(value As String) As YourEnumType
Return CType(GetEnumByStringValueAttribute(value, GetType(YourEnumType)), YourEnumType)
End Function
그런 다음 Enum(문자열 속성 사용)을 호출합니다.
Dim mEnum as MyEnum = GetEnumByStringValueAttribute(Of MyEnum)("Personal Contact")
"속성" 값을 빼려면(명확하게 설명하기 위해 '없음' 처리가 제거됨):
Public Function GetEnumValue(Of YourEnumType)(p As YourEnumType) As String
Return DirectCast(Attribute.GetCustomAttribute(ForValue(p), GetType(StringValueAttribute)), StringValueAttribute).Value
End Function
Private Function ForValue(Of YourEnumType)(p As YourEnumType) As MemberInfo
Return GetType(YourEnumType).GetField([Enum].GetName(GetType(YourEnumType), p))
End Function
문자열 특성을 가져오기 위한 호출(Enum 사용):
Dim strValue as String = GetEnumValue(Of MyEnum)(MyEnum.Contact)
ENUM을 사용하여 이 값을 얻으려면 어떻게 해야 합니까?또는 다른 방법으로 할 수 있습니다.
열거값을 문자열에 매핑하는 세 가지 일반적인 방법은 다음과 같습니다.
- 을 합니다.
Dictionary(Of YourEnumType, String)
- 열형값예속성을거예()으로 합니다.
DescriptionAttribute
과 함께 ) 그고리반함그데들려니다옵을께성과▁)다▁them. - 을 합니다.
Switch
제가 보기에, 이 옵션들 중 첫 번째는 아마도 가장 단순할 것입니다.
저는 이것이 오래된 게시물이라는 것을 알고 있습니다. 공유할 가치가 있는 멋진 솔루션을 찾았습니다.
''' <summary>
''' Gives acces to strings paths that are used often in the application
''' </summary>
Public NotInheritable Class Link
Public Const lrAutoSpeed As String = "scVirtualMaster<.lrAutoSpeed>"
Public Const eSimpleStatus As String = "scMachineControl<.eSimpleStatus>"
Public Const xLivebitHMI As String = "scMachineControl<.xLivebitHMI>"
Public Const xChangeCycleActive As String = "scMachineControl<.xChangeCycleActive>"
End Class
용도:
'Can be anywhere in you applicaiton:
Link.xChangeCycleActive
이렇게 하면 불필요한 추가 코딩을 방지할 수 있고 유지 관리가 용이하며 추가 프로세서 오버헤드를 최소화할 수 있습니다.
또한 Visual Studio는 일반 Enum과 마찬가지로 "Link"를 입력한 직후 문자열 속성을 표시합니다.
목록이나 콤보에 열거형을 표시하기만 원하는 경우 다음과 같은 태그를 사용할 수 있습니다.
Private Enum MyEnum
Select_an_option___
__ACCOUNTS__
Invoices0
Review_Invoice
__MEETINGS__
Scheduled_Meetings0
Open_Meeting
Cancelled_Meetings0
Current_Meetings0
End Enum
그리고 나서 당깁니다.MyEnum
끈로묶사용하는서어으는사를 합니다.Replace
(또는)Regex
) 태그를 바꾸려면 다음을 수행합니다. "_"는"...", "_"("..."), "_"("**"), "_"("), "_"("), "_"("), "", "", "", "",", "", "", "", "",", "", "", "", "", "", "", "",",", "", "그런 다음 어레이로 다시 포장하여 다음과 같은 콤보 상자에 덤프합니다.
Select an option...
**ACCOUNTS**
Invoices
Review Invoice
**MEETINGS**
Scheduled Meetings
Open Meeting
Cancelled Meetings
Current Meetings
(예를 들어, 숫자를 사용하여 송장 번호 또는 회의실을 입력하는 텍스트 필드를 비활성화할 수 있습니다. 예에서는, 예에서제,Review Invoice
그리고.Open Meeting
추가 입력을 예상할 수 있으므로 해당 선택에 대해 텍스트 상자를 사용할 수 있습니다.)
선택한 콤보 항목을 구문 분석하면 열거형이 예상대로 작동하지만 콤보가 원하는 대로 보이도록 하려면 코드 한 줄(텍스트 대체)만 추가하면 됩니다.
(설명은 실제 솔루션의 약 10배에 해당합니다!)
Microsoft의 "How to: Determinate the String Associated with an Enumeration Value (Visual Basic)" 기술은 일부 상황에서 유용할 것입니다(불행히도 제 기술에는 도움이 되지 않았습니다).Microsoft의 예:
VB:
Public Enum flavorEnum
salty
sweet
sour
bitter
End Enum
Private Sub TestMethod()
MsgBox("The strings in the flavorEnum are:")
Dim i As String
For Each i In [Enum].GetNames(GetType(flavorEnum))
MsgBox(i)
Next
End Sub
언급URL : https://stackoverflow.com/questions/12312325/define-string-enum-in-vb-net
'programing' 카테고리의 다른 글
쉼표로 구분된 항목을 새 행으로 분할 (0) | 2023.07.02 |
---|---|
ggplot2의 중심 그림 제목 (0) | 2023.07.02 |
SQL 서버에 파일이 있는지 확인하시겠습니까? (0) | 2023.07.02 |
Windows 7(윈도우 7)에서 폴더에 쓰기 위한 ASP.NET 권한을 부여하려면 어떻게 해야 합니까? (0) | 2023.07.02 |
MongoDB mapreduce에서 values 객체를 평탄화하려면 어떻게 해야 합니까? (0) | 2023.07.02 |