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

如何在VB.NET中通过用户输入内容引用变量?

在VB.NET中根据用户输入引用变量的实现方法

嘿,这个需求其实在VB.NET里有两种常用的实现路径,取决于你的具体场景,我给你详细拆解下:

方法一:用字典(Dictionary)做键值映射(推荐)

这种方法最直观,性能也更好,适合你提前知道要关联的"输入字符串-变量值"对应关系的场景。本质是把用户可能输入的字符串作为字典的键,对应的值存进去,直接查询即可:

' 第一步:创建字典,定义输入和对应值的映射关系
Dim variableLookup As New Dictionary(Of String, String) From {
    {"str1", "sheriffs"},
    {"str2", "deputies"},
    {"str3", "outlaws"}
}

' 第二步:获取用户输入(这里以控制台为例,WinForms/WPF可以用TextBox.Text)
Dim userInput As String = Console.ReadLine()

' 第三步:查询并输出结果
If variableLookup.ContainsKey(userInput) Then
    Console.WriteLine(variableLookup(userInput))
Else
    Console.WriteLine("输入的变量名不存在哦~")
End If

为什么推荐这个方法?

  • 代码简单易懂,维护起来方便,想加新的映射直接在字典里加就行
  • 性能比反射好,不需要动态解析类型成员
  • 不受变量作用域限制,不管是局部还是全局的映射关系都能处理

方法二:用反射(Reflection)获取已定义变量

如果你的变量已经在代码里定义好了,想直接通过用户输入的变量名拿到对应的值,就可以用反射来实现。不过反射相对复杂,性能也稍差,适合必须操作现有变量的场景:

' 假设你已经在类/模块里定义了这些变量
Dim str1 As String = "sheriffs"
Dim str2 As String = "deputies"
Dim str3 As String = "outlaws"

' 获取用户输入
Dim userInput As String = Console.ReadLine()

Try
    ' 动态获取当前类的字段(变量)信息
    ' 如果是模块,把Me.GetType()换成GetType(你的模块名称)
    ' BindingFlags要包含变量的访问级别(Public/NonPublic)和实例/静态类型
    Dim field = Me.GetType().GetField(
        userInput,
        Reflection.BindingFlags.Instance Or 
        Reflection.BindingFlags.Public Or 
        Reflection.BindingFlags.NonPublic
    )

    If field IsNot Nothing Then
        ' 获取变量的值并输出
        Dim value = field.GetValue(Me)
        Console.WriteLine(value)
    Else
        Console.WriteLine("找不到对应的变量哦")
    End If
Catch ex As Exception
    Console.WriteLine($"查询出错:{ex.Message}")
End Try

注意事项

  • 反射只能获取类/模块的成员变量,局部变量(比如方法内部定义的)是拿不到的
  • 要注意变量的访问修饰符,如果是Private,必须加上BindingFlags.NonPublic
  • 反射会有一定的性能开销,非必要场景优先用字典方法

内容的提问来源于stack exchange,提问作者Cameron Wickes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:35:36