c#vb.net动态创建二维数组

在VB.NET中,使用New Object()()创建二维数组确实存在一定的性能开销,因为每次都要实例化新的Object数组。以下是更高效的替代方案:

cs 复制代码
C#实现VB.NET风格的二维数组初始化
        string[,] employeeData = {
            {"张三", "1001"},
            {"李四", "1002"},
            {"王五", "1003"}
        };
cs 复制代码
var employeeData = new List<string[]>
{
    new[] {"张三", "1001"},
    new[] {"李四", "1002"},
    new[] {"王五", "1003"}
};
cs 复制代码
   var employeeData = new[]
        {
            new[] {"张三", "1001"},
            new[] {"李四", "1002"},
            new[] {"王五", "1003"}
        }.ToList();

VB.NET 推荐方案1:使用字符串二维数组(正确)

vbnet 复制代码
 Dim TableRowsData(,) As String = {
     {"姓名", "工号"},
     {"李四", "1002"},
     {"王五", "1003"}
  }

使用字符串二维数组(错误)

vbnet 复制代码
Dim employeeData = { {"张三", "1001"},
{"李四", "1002"},
{"王五", "1003"} }

特点:

  • 直接初始化字符串二维数组
  • 无需显式New Object操作
  • 类型安全且内存占用更小

推荐方案2:使用List(Of String())--正确

初始化List(Of String())的正确语法需要显式声明内部数组类型

vbnet 复制代码
Dim employeeData As New List(Of String()) From {
    New String() {"张三", "1001"},
    New String() {"李四", "1002"},
    New String() {"王五", "1003"}
}

优势:

  • 动态扩展性更好
  • 支持后续添加/删除操作
  • 比Object数组更高效

或者:(错误)

vbnet 复制代码
Dim employeeData = {
    {"张三", "1001"},
    {"李四", "1002"},
    {"王五", "1003"}
}.ToList()
  1. 使用集合初始化器直接创建二维数组
  2. 通过.ToList()转换为List(Of String())
  3. 无需显式声明New String()和New List
  4. 保持类型安全且内存高效
  5. 完整功能与原始代码等效

性能对比

方案 内存占用 执行效率 扩展性
Object()() 固定
String(,) 固定
List(Of String()) 灵活

建议根据实际需求选择:

  • 数据固定不变时用方案1
  • 需要动态操作数据时用方案

实际是什么类型?

在VB.NET中,Dim employeeData = {...} 这种初始化方式会隐式创建一个 ‌二维字符串数组 ‌,具体类型为 String(,)(即 String[,])。以下是详细说明:

  1. 实际类型‌:

    • 等价于显式声明:Dim employeeData As String(,) = {...}
    • 内存布局为固定大小的矩形数组(3行×2列)
  2. Object()的区别‌:

    • 相比New Object(){}String(,)直接存储字符串,无需装箱操作,效率更高
    • 类型安全,编译时会检查元素是否为字符串
  3. 验证方法 ‌:

    可通过以下代码验证类型:

    Console.WriteLine(employeeData.GetType().Name) ' 输出:String[,]

原来的方案:

vbnet 复制代码
示例数据(二维数组)
Dim employeeData = New Object()() {
New Object() {"张三", "1001"},
New Object() {"李四", "1002"},
New Object() {"王五", "1003"}
}
相关推荐
乔宕一24 分钟前
windows SSH服务修改SSH登陆后的默认终端
运维·windows·ssh
love530love35 分钟前
ComfyUI-3D-Pack:Windows 下手动编译 mesh_inpaint_processor C++ 加速模块
c++·人工智能·windows·python·3d·hunyuan3d·comfyui-3d-pack
格林威1 小时前
工业相机图像采集:Grab Timeout 设置建议——拒绝“假死”与“丢帧”的黄金法则
开发语言·人工智能·数码相机·计算机视觉·c#·机器视觉·工业相机
唐青枫1 小时前
C#.NET SignalR + Redis Backplane 深入解析:多节点部署与跨实例消息同步
c#·.net
oyzz1202 小时前
Windows 上彻底卸载 Node.js
windows·node.js
闭关苦炼内功2 小时前
Win10 安装 MySQL5.7.36 数据库记录
数据库·windows·mysql
斯密码赛我是美女3 小时前
周报(欢乐赛+信息搜集ctfshow+Trae-mcp)
网络·windows
米饭不加菜3 小时前
Windows 键盘快捷方式总览
windows·计算机外设
小小小米粒3 小时前
观察者模式
windows
lucky_syq3 小时前
Windows电脑部署OpenClaw保姆级教程(2026最新版)
人工智能·windows·开源·电脑·openclaw