VB.NET中如何通过存储数组名的字符串变量获取对应数组内容
VB.NET实现通过字符串变量获取对应数组元素的方案
该需求在VB.NET中完全可以实现,通常有两种实现路径,优先推荐使用字典映射方案,性能更高、逻辑更可控。
方案一:字典映射(最优选择)
提前将数组名和对应的数组实例以键值对的形式存入字典,后续直接通过字符串key读取对应数组即可,无需额外开销。
实现代码如下:
首先定义存储映射关系的字典:
' 可根据需求定义为全局、类级别的只读字典 Private ReadOnly arrayMap As New Dictionary(Of String, String()) From { {"Common", {"value1", "value2", "value3", "value4"}}, {"Browser", {"item1", "item2", "item3", "item4", "item5"}}, {"AddedItems", {"item6", "item7", "item8", "item9"}} }
调用示例:
Dim getItem As String = "Browser" ' 先校验key是否存在,避免触发异常 If arrayMap.ContainsKey(getItem) Then For Each listItem As String In arrayMap(getItem) ' 在此处编写你的业务逻辑,示例为输出元素 Console.WriteLine(listItem) Next End If
该方案优势:
- 无额外性能开销,查找效率为O(1)
- 逻辑简单直观,容易维护
- 数组增删改直接修改字典即可,不依赖代码结构
方案二:反射实现(仅特殊场景使用)
如果你的数组是定义为类的字段/属性,无法提前存入字典,可以通过反射实现,但该方案性能差、稳定性低,非必要不使用。
假设数组定义为当前类的实例字段,实现代码如下:
Imports System.Reflection ' 需要先导入反射命名空间 Dim getItem As String = "Browser" ' 获取当前类的类型 Dim currentType As Type = Me.GetType() ' 查找对应名称的字段,BindingFlags可根据你的字段实际修饰符调整 Dim targetField As FieldInfo = currentType.GetField(getItem, BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.NonPublic) ' 校验字段是否存在、且为字符串数组类型 If targetField IsNot Nothing AndAlso targetField.FieldType = GetType(String()) Then Dim targetArray As String() = CType(targetField.GetValue(Me), String()) For Each listItem As String In targetArray ' 在此处编写业务逻辑 Console.WriteLine(listItem) Next End If
如果数组是静态字段,只需将上述代码中的BindingFlags.Instance替换为BindingFlags.Static即可。
该方案劣势:
- 反射查找开销大,性能远低于字典方案
- 依赖字段的名称和修饰符,后续字段改名、改修饰符都会导致功能失效
- 存在访问权限限制,私有字段在部分场景下无法读取
内容的提问来源于stack exchange,提问作者MBF
相关产品推荐
相关产品推荐

