c#vb.net动态创建二维数组
在VB.NET中,使用New Object()()
创建二维数组确实存在一定的性能开销,因为每次都要实例化新的Object数组。以下是更高效的替代方案:
C#实现VB.NET风格的二维数组初始化string[,] employeeData = {{"张三", "1001"},{"李四", "1002"},{"王五", "1003"}};
var employeeData = new List<string[]>
{new[] {"张三", "1001"},new[] {"李四", "1002"},new[] {"王五", "1003"}
};
var employeeData = new[]{new[] {"张三", "1001"},new[] {"李四", "1002"},new[] {"王五", "1003"}}.ToList();
VB.NET 推荐方案1:使用字符串二维数组(正确)
Dim TableRowsData(,) As String = {{"姓名", "工号"},{"李四", "1002"},{"王五", "1003"}}
使用字符串二维数组(错误)
Dim employeeData = { {"张三", "1001"},
{"李四", "1002"},
{"王五", "1003"} }
特点:
- 直接初始化字符串二维数组
- 无需显式
New Object
操作 - 类型安全且内存占用更小
推荐方案2:使用List(Of String())--正确
初始化List(Of String())
的正确语法需要显式声明内部数组类型
Dim employeeData As New List(Of String()) From {New String() {"张三", "1001"},New String() {"李四", "1002"},New String() {"王五", "1003"}
}
优势:
- 动态扩展性更好
- 支持后续添加/删除操作
- 比Object数组更高效
或者:(错误)
Dim employeeData = {{"张三", "1001"},{"李四", "1002"},{"王五", "1003"}
}.ToList()
- 使用集合初始化器直接创建二维数组
- 通过.ToList()转换为List(Of String())
- 无需显式声明New String()和New List
- 保持类型安全且内存高效
- 完整功能与原始代码等效
性能对比
方案 | 内存占用 | 执行效率 | 扩展性 |
---|---|---|---|
Object()() | 高 | 低 | 固定 |
String(,) | 低 | 高 | 固定 |
List(Of String()) | 中 | 中 | 灵活 |
建议根据实际需求选择:
- 数据固定不变时用方案1
- 需要动态操作数据时用方案
实际是什么类型?
在VB.NET中,Dim employeeData = {...}
这种初始化方式会隐式创建一个 二维字符串数组,具体类型为 String(,)
(即 String[,]
)。以下是详细说明:
实际类型:
- 等价于显式声明:
Dim employeeData As String(,) = {...}
- 内存布局为固定大小的矩形数组(3行×2列)
- 等价于显式声明:
与
Object()
的区别:- 相比
New Object(){}
,String(,)
直接存储字符串,无需装箱操作,效率更高 - 类型安全,编译时会检查元素是否为字符串
- 相比
验证方法:
可通过以下代码验证类型:Console.WriteLine(employeeData.GetType().Name) ' 输出:String[,]
原来的方案:
示例数据(二维数组)
Dim employeeData = New Object()() {
New Object() {"张三", "1001"},
New Object() {"李四", "1002"},
New Object() {"王五", "1003"}
}