VB.Net中如何以字符串变量内的内容作为变量名创建变量?
在VB.Net中用字符串动态创建变量的实现方案
嘿,这个问题我太熟悉了!VB.Net作为静态类型语言,没法直接像Python这类动态语言那样,用字符串直接创建普通的局部变量,但咱们有几个非常实用的替代方案,完全能满足你的需求,我给你详细说说:
方案一:用Dictionary存储(最推荐,简单高效)
这是最常用的方式,把字典的键当作动态的变量名,值就是变量的内容,操作起来特别直观:
' 初始化一个字典,用来存放你的"动态变量" Dim dynamicVariables As New Dictionary(Of String, String)() Dim varA As String = "varValue" ' 把字符串varA的内容作为键,赋值对应的变量值 dynamicVariables(varA) = "这是动态命名变量的内容" ' 调用的时候直接用键名访问,就像用变量一样 Console.WriteLine(dynamicVariables("varValue")) ' 输出:这是动态命名变量的内容
这个方案的优势是性能好、类型安全,编译时就能做检查,绝大多数场景都适用。
方案二:用ExpandoObject(贴近变量语法)
如果你想要更接近普通变量的调用语法,可以用ExpandoObject,它属于动态类型,需要导入System.Dynamic命名空间:
Imports System.Dynamic Dim varA As String = "varValue" ' 创建动态对象 Dim dynamicObj As ExpandoObject = New ExpandoObject() ' 把动态对象转成字典来添加成员 Dim dynamicDict As IDictionary(Of String, Object) = dynamicObj ' 添加动态"变量" dynamicDict(varA) = "用ExpandoObject实现的动态变量" ' 直接像访问普通变量一样调用 Console.WriteLine(dynamicObj.varValue) ' 输出:用ExpandoObject实现的动态变量
注意哦,这个是动态类型,编译时不会做类型检查,运行时才会解析,适合需要灵活语法的场景。
方案三:用反射给类动态添加成员(特殊场景用)
如果你的需求是给某个类动态添加成员变量(不是局部变量),可以用反射来实现:
Imports System.Reflection ' 先定义一个空类,用来承载动态成员 Public Class DynamicClass ' 初始无成员,后续动态添加 End Class Sub Main() Dim varA As String = "varValue" Dim classInstance As New DynamicClass() ' 获取类的类型,尝试获取指定名称的字段 Dim fieldInfo As FieldInfo = classInstance.GetType().GetField(varA, BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.NonPublic) ' 如果字段不存在,就动态创建一个公共的字符串类型字段 If fieldInfo Is Nothing Then fieldInfo = classInstance.GetType().DefineField(varA, GetType(String), FieldAttributes.Public) End If ' 给这个动态字段赋值 fieldInfo.SetValue(classInstance, "通过反射添加的类成员变量") ' 获取字段值并输出 Console.WriteLine(fieldInfo.GetValue(classInstance)) ' 输出:通过反射添加的类成员变量 End Sub
反射的性能相对差一些,而且写法繁琐,一般只在必须给类动态扩展成员的特殊场景下使用。
总的来说,优先选Dictionary方案,简单又靠谱;想要变量式语法就用ExpandoObject;反射只在特定需求下考虑~
内容的提问来源于stack exchange,提问作者Alberto Muñoz Sánchez
相关产品推荐
相关产品推荐

