.NET集合类型、装箱与拆箱操作详解
立即解锁
发布时间: 2025-08-26 01:57:31 阅读量: 3 订阅数: 16 


精通VB 2008与.NET 3.5平台编程
### .NET集合类型、装箱与拆箱操作详解
#### 1. 关键接口介绍
- **IDictionaryEnumerator**:`IDictionary.GetEnumerator()` 方法返回 `IDictionaryEnumerator` 类型的实例。它是一个强类型枚举器,扩展了 `IEnumerator` 接口,添加了以下功能:
```vb
Public Interface IDictionaryEnumerator
Inherits IEnumerator
ReadOnly Property Entry() As DictionaryEntry
ReadOnly Property Key() As Object
ReadOnly Property Value() As Object
End Interface
```
通过 `Entry` 属性,你可以枚举字典中的项,该属性返回 `System.Collections.DictionaryEntry` 类类型。此外,还可以使用 `Key` 和 `Value` 属性遍历键值对。
- **IList**:`System.Collections` 中的最后一个关键接口是 `IList`,它提供了在索引容器中插入、移除和索引项的能力:
```vb
Public Interface IList
Inherits ICollection, IEnumerable
Function Add(ByVal value As Object) As Integer
Sub Clear()
Function Contains(ByVal value As Object) As Boolean
Function IndexOf(ByVal value As Object) As Integer
Sub Insert(ByVal index As Integer, ByVal value As Object)
Sub Remove(ByVal value As Object)
Sub RemoveAt(ByVal index As Integer)
ReadOnly Property IsFixedSize() As Boolean
ReadOnly Property IsReadOnly() As Boolean
Property Item(ByVal index As Integer) As Object
End Interface
```
#### 2. System.Collections 命名空间中的类类型
| 类名 | 用途 | 实现的关键接口 |
| ---- | ---- | ---- |
| ArrayList | 表示动态大小的对象数组 | IList、ICollection、IEnumerable、ICloneable |
| Hashtable | 表示由数字键标识的对象集合,存储在其中的自定义类型应重写 `System.Object.GetHashCode()` | IDictionary、ICollection、IEnumerable、ICloneable |
| Queue | 表示标准的先进先出(FIFO)队列 | ICollection、ICloneable、IEnumerable |
| SortedList | 类似于字典,但元素也可以通过序数位置(如索引)访问 | IDictionary、ICollection、IEnumerable、ICloneable |
| Stack | 表示后进先出(LIFO)队列,提供入栈和出栈(以及查看栈顶元素)功能 | ICollection、ICloneable、IEnumerable |
除了这些关键类型,`System.Collections` 还定义了一些不太常用的类型,如 `BitArray`、`CaseInsensitiveComparer` 和 `CaseInsensitiveHashCodeProvider`,以及一些抽象基类(`CollectionBase`、`ReadOnlyCollectionBase` 和 `DictionaryBase`),可用于构建强类型容器。
#### 3. 常见集合类型的使用
- **ArrayList 类型**:创建一个名为 `CollectionTypes` 的新控制台应用程序项目,并插入 `Car` 类型。`ArrayList` 允许动态调整内容大小,以下是一个使用 `ArrayList` 操作 `Car` 对象的示例:
```vb
Sub ArrayListTest()
' 创建 ArrayList 并添加一系列 Car 对象
Dim carArList As New ArrayList()
carArList.AddRange(New Car() {New Car("Fred", 90, 10), _
New Car("Mary", 100, 50), New Car("MB", 190, 11)})
Console.WriteLine("Items in carArList: {0}", carArList.Count)
' 使用 For/Each 迭代内容
For Each c As Car In carArList
Console.WriteLine("Car pet name: {0}", c.Name)
Next
' 插入新的 Car 对象
Console.WriteLine("->Inserting new Car.")
carArList.Insert(2, New Car("TheNewCar", 0, 12))
Console.WriteLine("Items in carArList: {0}", carArList.Count)
' 获取子对象作为数组
Dim arrayOfCars As Object() = carArList.ToArray()
Dim i As Integer = 0
' 使用 While 循环和 Length 属性迭代数组
While i < arrayOfCars.Length
Console.WriteLine("Car pet name: {0}", CType(arrayOfCars(i), Car).Name)
i = i + 1
End While
End Sub
```
这里使用 `AddRange()` 方法填充 `ArrayList`,然后使用 `Insert()` 方法在指定索引处插入新项,最后使用 `ToArray()` 方法将 `ArrayList` 内容转换为 `System.Object` 类型的数组。
- **Queue 类型**:队列确保以先进先出的方式访问项。以下是一个模拟汽车排队等待洗车的示例:
```vb
Public Sub WashCar(ByVal c As Car)
Console.WriteLine("Cleaning {0}", c.Name)
End Sub
Sub QueueTest()
' 创建包含三个项的队列
Dim carWashQ As New Queue()
carWashQ.Enqueue(N
```
0
0
复制全文
相关推荐









