如何在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
相关产品推荐
相关产品推荐

