You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过变量名设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:05:19