如何通过变量名设置VB.NET模块中指定变量的值?
根据变量名字符串设置VB.NET模块属性值的正确方法
你的问题核心在于:模块里定义的是公共属性(Public Property),但你用反射API时错误调用了GetField(用于获取字段),字段和属性是.NET中不同的成员类型,必须用对应的反射方法处理。
修正后的完整实现代码
Imports System.Reflection Public Class Form1 Sub New() SetVariableByVariableName("beta", "new value") End Sub Public Sub SetVariableByVariableName(ByVal variableName As String, ByVal value As String) ' 获取模块的公共静态属性信息 Dim propInfo As PropertyInfo = GetType(MyModule).GetProperty(variableName, BindingFlags.Public Or BindingFlags.Static) If propInfo IsNot Nothing Then ' 给静态属性赋值,实例参数传Nothing propInfo.SetValue(Nothing, value) ' 验证赋值结果 Console.WriteLine($"属性{variableName}的当前值:{propInfo.GetValue(Nothing)}") Else Console.WriteLine($"错误:模块中不存在名为{variableName}的公共属性") End If End Sub End Class Module MyModule Public Property alpha As String Public Property beta As String Public Property charlie As String End Module
关键注意事项
- 区分字段与属性:如果模块里是
Public Dim alpha As String(字段),才用GetField;如果是Public Property,必须用GetProperty。 - VB.NET模块成员默认是Shared(静态),反射时必须指定
BindingFlags.Static,同时搭配BindingFlags.Public匹配公共成员。 - 静态成员赋值时,
SetValue的第一个参数(实例对象)传Nothing即可。
内容的提问来源于stack exchange,提问作者Wabi-Sabi
相关产品推荐
相关产品推荐

