ReadOnlySpan<T>.Enumerator 结构

定义

ReadOnlySpan<T> 的元素提供枚举器。

public: value class ReadOnlySpan<T>::Enumerator
public ref struct ReadOnlySpan<T>.Enumerator
type ReadOnlySpan<'T>.Enumerator = struct
Public Structure ReadOnlySpan(Of T).Enumerator

类型参数

T
继承
ReadOnlySpan<T>.Enumerator

注解

C# 语言的 C# foreachFor Each...Visual Basic 中的下一个 构造隐藏枚举器的复杂性。 建议使用 foreachFor Each...Next 推荐直接操作枚举器,而不是直接操作枚举器。

最初,枚举器位于第一个元素 ReadOnlySpan<T>之前。 在此位置上,未定义 Current。 在读取值Current之前,必须调用MoveNext将枚举器推进到第一项ReadOnlySpan<T>

Current 返回相同的值,直到 MoveNext 调用为止。 MoveNext 设置为 Current .. 中的 ReadOnlySpan<T>下一项

如果 MoveNext 传递结束 ReadOnlySpan<T>MoveNext 则返回 false。 当枚举器处于此状态时,后续调用 MoveNext 也会返回 falseCurrent 未定义。 不能再次设置为 Current 第一项 ReadOnlySpan<T> ;必须改为创建新的枚举器实例。

尽管堆栈上分配了该 ReadOnlySpan<T> 数据,但指向的基础数据 ReadOnlySpan<T> 可能不是。 因此,通过 ReadOnlySpan<T> 枚举本质上不是线程安全的过程。 若要保证枚举期间的线程安全性,必须实现自己的同步。

与 .NET 中的其他一些枚举器结构不同,如下 ReadOnlySpan<T>.Enumerator

  • 不实现 IEnumeratorIEnumerator<T> 接口。 这是因为 ReadOnlySpan<T>.Enumeratorref 结构 ,不能装箱。

  • 不包括方法 Reset ,该方法可以将枚举器设置为其初始位置,然后再将范围中的第一个元素设置为其初始位置。 IEnumerator.Reset() (方法必须作为接口的一部分实现,但大多数实现者要么引发异常,要么不提供任何实现。)

属性

Current

获取对枚举器当前位置的项目的引用。

方法

MoveNext()

将枚举器推进到 ReadOnlySpan<T> 的下一项。

适用于