编程VB.NET 开发者

Visual Basic 中 List(Of T) 类型的集合元素如何访问,哪些操作是可用的,以及在索引访问中哪些情况会导致错误?

用 Hintsage AI 助手通过面试

答案。

问题的历史

List(Of T) 集合在 VB.NET 中引入,用于替代过时的集合,提供类型安全性、动态大小调整和快速的索引访问。使用列表可以结构化数据,处理类型化元素,并避免与非通用集合相关联的常见错误。

问题

初学者通常不明白如何正确访问列表中的元素,如何添加、修改和删除元素,以及在错误使用索引时会发生什么(例如,超出列表范围)。这在程序运行时会导致异常。

解决方案

List(Of T) 中,元素是从零开始索引的。可以根据索引进行读写访问。如果索引无效,则会引发 ArgumentOutOfRangeException 异常。集合的方法可以安全地处理元素:

示例代码:

Imports System.Collections.Generic Dim numbers As New List(Of Integer)() numbers.Add(10) numbers.Add(20) Dim first As Integer = numbers(0) ' 获取索引为 0 的元素 numbers(1) = 99 ' 设置索引为 1 的元素 ' 删除 numbers.RemoveAt(0) ' 按索引删除

关键特性:

  • 动态大小,自动内存重新分配
  • O(1) 快速索引访问
  • 类型安全性(编译时避免类型错误)

陷阱问题。

如果访问索引等于 List(Of T) 中元素的数量,我们会得到最后一个元素吗?

不会。索引是从 0 开始的,最大有效索引为 (Count - 1)。访问等于 Count 的索引将引发 ArgumentOutOfRangeException 错误。

是否可以在不删除现有数据的情况下将元素添加到 List(Of T) 的中间?

可以,通过使用 Insert 方法:

numbers.Insert(1, 42) ' 将 42 插入第二个位置,其他元素向右移动。

在使用 For Each 遍历时修改 List(Of T) 的集合是否危险?

危险。这将导致 InvalidOperationException。对于这些操作,请使用带索引的 For 循环,或者先构建要删除的列表。

常见错误和反模式

  • 访问不存在的索引
  • 在 For Each 中添加/删除元素
  • 在访问前缺乏空检查

生活示例

负面案例

在程序中通过 For Each 遍历 List(Of T),并在迭代中删除元素。

优点:

  • 编写简单

缺点:

  • 程序将因 InvalidOperationException 异常而崩溃,数据未处理

正面案例

代码通过 For 从后向前遍历元素,并删除符合条件的对象。

优点:

  • 没有异常,所有删除都正确

缺点:

  • 循环的可读性稍差