Получение статических значений полей типа с помощью отражения

Вам, вероятно, нужно экранировать знак плюс:

var pattern = /d\+1/

Знак плюс используется в регулярных выражениях для обозначения 1 или более символов подряд.

8
задан John M Gant 2 June 2009 в 14:51
поделиться

2 ответа

Позвоните

field.GetValue(Nothing)

, и все будет хорошо. Вам не нужен экземпляр для статических членов.

Я не думаю, что GetRawConstantValue - это то, что вам нужно - я бы придерживался приведенного выше кода.

24
ответ дан 5 December 2019 в 06:10
поделиться

Если посмотреть на то, что вы пытаетесь сделать в более широком смысле, возможно, это будет лучше:

Public Interface ICustomEnum(Of T)
    Function FromT(ByVal value As T) As ICustomEnum(Of T)
    ReadOnly Property Value() As T

    ''// Implement using a private constructor that accepts and sets the Value property, 
    ''// one shared readonly property for each desired value in the enum,
    ''// and widening conversions to and from T.
    ''// Then see this link to get intellisense support
    ''// that exactly matches a normal enum:
    ''// https://stackoverflow.com/questions/102084/hidden-features-of-vb-net/102217#102217
End Interface

'
''' <completionlist cref="ReasonCodeValue"/>
Public NotInheritable Class ReasonCodeValue
    Implements ICustomEnum(Of String)

    Private _value As String
    Public ReadOnly Property Value() As String Implements ICustomEnum(Of String).Value
        Get
            Return _value
        End Get
    End Property

    Private Sub New(ByVal value As String)
        _value = value
    End Sub

    Private Shared _ServiceNotCovered As New ReasonCodeValue("SNCV")
    Public Shared ReadOnly Property ServiceNotCovered() As ReasonCodeValue
        Get
            Return _ServiceNotCovered
        End Get
    End Property

    Private Shared _MemberNotEligible As New ReasonCodeValue("MNEL")
    Public Shared ReadOnly Property MemberNotEligible() As ReasonCodeValue
        Get
            Return _MemberNotEligible
        End Get
    End Property

    Public Shared Function FromString(ByVal value As String) As ICustomEnum(Of String)
        ''// use reflection or a dictionary here if you have a lot of values
        Select Case value
            Case "SNCV"
                Return _ServiceNotCovered
            Case "MNEL"
                Return _MemberNotEligible
            Case Else
                Return Nothing ''//or throw an exception
        End Select
    End Function

    Public Function FromT(ByVal value As String) As ICustomEnum(Of String) Implements ICustomEnum(Of String).FromT
        Return FromString(value)
    End Function

    Public Shared Widening Operator CType(ByVal item As ReasonCodeValue) As String
        Return item.Value
    End Operator

    Public Shared Widening Operator CType(ByVal value As String) As ReasonCodeValue
        Return FromString(value)
    End Operator
End Class

А затем, используя эту ссылку, вы сможете получить поддержку intellisense, которая точно совпадает с обычным перечислением:
Скрытые возможности VB.NET?

3
ответ дан 5 December 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: