Stack<T>.Enumerator 结构

定义

枚举 . 的 Stack<T>元素

public: value class Stack<T>::Enumerator : System::Collections::Generic::IEnumerator<T>
public struct Stack<T>.Enumerator : System.Collections.Generic.IEnumerator<T>
[System.Serializable]
public struct Stack<T>.Enumerator : System.Collections.Generic.IEnumerator<T>
type Stack<'T>.Enumerator = struct
    interface IEnumerator<'T>
    interface IEnumerator
    interface IDisposable
[<System.Serializable>]
type Stack<'T>.Enumerator = struct
    interface IEnumerator<'T>
    interface IDisposable
    interface IEnumerator
Public Structure Stack(Of T).Enumerator
Implements IEnumerator(Of T)

类型参数

T
继承
Stack<T>.Enumerator
属性
实现

注解

C# 语言的 foreach 语句(For Each Visual Basic)隐藏枚举器的复杂性。 因此,建议使用 foreach ,而不是直接操作枚举器。

枚举器可用于读取集合中的数据,但不能用于修改基础集合。

最初,枚举器位于集合中的第一个元素之前。 在此位置, Current 未定义。 因此,在读取值MoveNext之前,必须调用Current枚举器将枚举器提升到集合的第一个元素。

Current 返回相同的对象,直到 MoveNext 调用为止。 MoveNext 设置为 Current 下一个元素。

如果 MoveNext 传递集合的末尾,则枚举器位于集合中的最后一个元素之后并 MoveNext 返回 false。 当枚举器处于此位置时,后续调用 MoveNext 也会返回 false。 如果返回MoveNext的最后一个调用falseCurrent则为未定义。 不能再次设置为 Current 集合的第一个元素;必须改为创建新的枚举器实例。

只要集合保持不变,枚举器就保持有效。 如果对集合进行了更改(例如添加、修改或删除元素),枚举器将不可恢复地失效,并且下次调用 MoveNextIEnumerator.Reset 时会引发 InvalidOperationException 异常。

枚举器不具有对集合的独占访问权限;因此,通过集合进行枚举本质上不是线程安全的过程。 若要保证枚举期间的线程安全性,可以在整个枚举期间锁定集合。 若要允许多个线程访问集合进行读取和写入,必须实现自己的同步。

集合的默认 System.Collections.Generic 实现不会同步。

属性

名称 说明
Current

获取枚举器当前位置的元素。

方法

名称 说明
Dispose()

释放该 Stack<T>.Enumerator命令使用的所有资源。

MoveNext()

将枚举器前进到下一个 Stack<T>元素。

显式接口实现

名称 说明
IEnumerator.Current

获取枚举器当前位置的元素。

IEnumerator.Reset()

将枚举器设置为其初始位置,该位置位于集合中的第一个元素之前。 此类不能被继承。

适用于

另请参阅