在VB.net中一维数组,与VBA有什么区别

==标题==

|------------------------|
| 在VB.net中一维数组,与VBA有什么区别 |

==正文==

(一)在VB.net中的一维数组,初始化与赋值,举例说明

以下是VB.net中一维数组的初始化与赋值方法及示例说明,结合不同场景提供具体代码:

一、声明时直接初始化

语法:`Dim数组名()As数据类型={值1,值2,...}`

特点:声明同时赋值,无需指定长度(编译器自动推断)

示例:

makefile 复制代码
' 初始化字符串数组 Dim fruits() As String = {"Apple", "Banana", "Orange"} ' 初始化整数数组 Dim numbers() As Integer = {1, 2, 3, 4, 5}

>此时`fruits`长度为3,`numbers`长度为5,索引从0开始。

二、先声明后赋值

场景:数组大小或初始值需动态确定

方法:分两步操作(声明+单独赋值)

'1.声明数组但不初始化

sql 复制代码
' 1. 声明数组但不初始化 Dim temperatures(3) As Single ' 声明长度为4的数组(索引0-3)' 2. 逐个元素赋值 temperatures(0) = 23.5 temperatures(1) = 18.2 temperatures(2) = 21.7 temperatures(3) = 25.0 
' 或使用索引变量批量赋值 Dim values(4) As Integer For i As Integer = 0 To 4     values(i) = i * 10 ' 结果:[0, 10, 20, 30, 40]Next

>注意:声明时`Dimarr(n)`表示索引范围0到n,总长度为n+1。

三、使用`New`关键字初始化

语法:`Dim数组名()As数据类型=New数据类型(){值1,值2,...}`

特点:显式调用构造函数,可结合匿名类型

示例:

makefile 复制代码
' 显式初始化 Dim colors() As String = New String() {"Red", "Green", "Blue"}' 初始化对象数组 Dim persons() As Object = New Object() {"Alice", 30, True}

>此方式与直接初始化等效,但语法更明确

四、动态调整数组大小(`ReDim`)

场景:需在运行时修改数组长度

方法:`ReDim[Preserve]数组名(新上界)`

示例:

powershell 复制代码
Dim scores() As Integer = {85, 90} ' 初始长度2 ' 扩展为长度5(原数据丢失)ReDim scores(4) ' 结果:[0, 0, 0, 0, 0]
' 保留原数据扩展 Dim data() As String = {"A", "B"}ReDim Preserve data(3) ' 结果:["A", "B", Nothing, Nothing]data(2) = "C" ' 赋值新元素

>关键:`Preserve`保留原有数据;无`Preserve`则重置所有元素为默认值

注意事项

1.索引范围:默认从0开始,可用`OptionBase1`改为从1开始(不推荐,易混淆)

2.类型安全:数组元素必须为同一数据类型(`Object`数组除外)

3.性能:频繁`ReDimPreserve`影响效率,建议改用`List(OfT)`动态集合

>完整示例可参考VB.net官方文档

(二)与VBA中的一维数组有什么区别

1. 1.索引默认起始值不同

  • VB.NET
    数组索引严格从 0 开始(如 Dim arr(5) As Integer 包含索引 0~5 共6个元素)。Option Base 语句已被废弃,无法修改起始索引。
  • VBA:
    索引默认从 0 开始,但可通过 Option Base 1 改为从 1 开始。从 Excel 对象(如 Range)赋值的数组默认索引为 1 (如 arr = Range("A1:A10") 的索引为 1~10)。

🧩 2. 数据类型与灵活性差异

  • VB.NET

    • 强类型数组(如 Integer()String()),元素必须统一类型(Object 数组除外)。

    • 支持匿名类型数组(New With {.Name = "Alice"})。

  • VBA:

    • 常用 Variant 类型数组,可混合存储不同类型数据(如字符串、数字、对象)。

    • 从 Excel 获取的数组默认为二维结构(即使单列)。

⚙️ 3. 初始化与赋值语法

💡 VBA 的 Array() 函数返回索引从 0 开始的数组,而 Excel 赋值返回索引从 1 开始的数组

🔄 4. 动态数组调整(ReDim)

  • VB.NET:使用 ReDim Preserve arr(新上界) 保留数据,但频繁操作性能低,推荐改用 List(Of T)
  • VBA: ReDim Preserve 更常见,但同样有性能损耗;无内置集合类替代

🧠 5. 底层实现与功能扩展

  • VB.NET

    • 数组继承自 System.Array,支持高级方法(如 LengthCopy

    • 完全面向对象,可结合 LINQ 查询。

  • VBA:

    • 基于 COM,功能较基础,无内置迭代器或集合扩展方法。

    • 依赖 Excel 对象模型处理数据。


⚠️ 关键注意事项

  1. 索引陷阱:
    VBA 中从 Excel 获取的数组索引可能从 1 开始,而 Array() 生成的从 0 开始,易引发越界错误。
  2. 类型安全:
    VB.NET 的强类型减少运行时错误,VBA 的 Variant 数组更灵活但需手动校验类型。
  3. 性能场景:
    VB.NET 中大型数组操作优先选 List 或集合;VBA 中避免频繁 ReDim Preserve。

💎 总结建议

  • 迁移 VBA 到 VB.NET
    注意索引重置为 0,用 List(Of T) 替代动态数组,强类型化数据。
  • VBA 优化:
    明确索引起点(用 LBound/UBound 检测),复杂数据处理时借用 Excel 函数

==The end==

==合集==

|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| VB.NET学习系列汇总 |

====若有用,请转发免费学习===

关注看更多文章

相关推荐
编码浪子1 小时前
趣味学RUST基础篇(智能指针_结束)
开发语言·算法·rust
七夜zippoe1 小时前
事务方案选型全景图:金融与电商场景的实战差异与落地指南
java·分布式·事务
爱编程的化学家2 小时前
代码随想录算法训练营第六天 - 哈希表2 || 454.四数相加II / 383.赎金信 / 15.三数之和 / 18.四数之和
数据结构·c++·算法·leetcode·双指针·哈希
CVer儿2 小时前
qt资料2025
开发语言·qt
杨二K3 小时前
认识HertzBeat的第一天
java·hertzbeat
DevilSeagull3 小时前
JavaScript WebAPI 指南
java·开发语言·javascript·html·ecmascript·html5
2zcode3 小时前
基于Matlab不同作战类型下兵力动力学模型的构建与稳定性分析
开发语言·matlab
期待のcode4 小时前
Spring框架1—Spring的IOC核心技术1
java·后端·spring·架构
闲人编程5 小时前
图像去雾算法:从物理模型到深度学习实现
图像处理·人工智能·python·深度学习·算法·计算机视觉·去雾
葵野寺5 小时前
【RelayMQ】基于 Java 实现轻量级消息队列(七)
java·开发语言·网络·rabbitmq·java-rabbitmq