使用反射获取类型的静态字段值

Joh*_*ant 8 .net vb.net reflection

我有一组静态"枚举"类,我用它来保存有意义的变量名来表示我在输入文件上收到的无意义的代码值.这是一个例子.

Public Class ReasonCodeValue
    Private Sub New()
    End Sub
    Public Shared ReadOnly ServiceNotCovered As String = "SNCV"
    Public Shared ReadOnly MemberNotEligible As String = "MNEL"
End Class
Run Code Online (Sandbox Code Playgroud)

我想编写一个方法,接受这些静态类之一的类型和字符串值,并确定该值是否是静态字段值之一.我知道如何获取特定对象的实例字段,我知道如何获取特定类型的静态字段列表; 我无法弄清楚的是如何在没有实例的情况下获取静态字段值.这是我到目前为止所得到的.

Public Function IsValidValue(ByVal type As Type, ByVal value As String) As Boolean
    Dim fields = type.GetFields(BindingFlags.Public Or BindingFlags.Static)
    For Each field As FieldInfo In fields
        DoSomething()
    Next
End Function
Run Code Online (Sandbox Code Playgroud)

我想我可以使枚举类非静态,这样我就可以创建一个实例来传递给FieldInfo.GetValue我的验证方法.如果可以的话,我宁愿保持我的课程.

我看到一个叫做的方法GetRawConstantValue.它看起来很危险.这会给我我想要的东西吗?还有其他想法吗?

Jon*_*eet 24

呼叫

field.GetValue(Nothing)
Run Code Online (Sandbox Code Playgroud)

它会没事的.您不需要静态成员的实例.

我不认为 GetRawConstantValue是你想要的-我会坚持到上面的代码.

  • 另一个JS事实:Jon Skeet在通用IL中计算他的答案,然后将其转换为适当的源代码...... (13认同)