跨度。C# 中的枚举器结构
原文:https://www . geesforgeks . org/span-enumerator-struct-in-c-sharp/
Span < T > 是 C# 7.2 引入的新特性,在中得到支持。NET Core 2.1 。它提供了对连续内存区域的类型安全访问。该内存可以位于堆、栈上,或者形成一个未分配的内存。Span < T >被定义为一个参考结构,这意味着它仅限于在堆栈上分配。引用结构设计的主要原因是为了确保在使用 Span < T >时不会导致额外的堆分配。Span < T >提高执行速度,减少现有代码中的内存分配。
这里,Span 引用一些已经分配的连续内存(彩色块)。
跨度< T >。枚举器结构为跨度T3】的元素提供枚举器。其中 Span < T > 提供了任意内存的连续区域的类型和内存安全表示。
语法:
public struct Span<T>.Enumerator
参数: 这里的参数是 T ,其中 T 是SpanT8】中的项目类型。
示例:
// C# program to demonstrate Span<T>.Enumerator Struct
using System;
using System.Threading.Tasks;
class GFG {
// a array "arr" type of byte
private static byte[] arr = new byte[4];
// main method
static void Main()
{
// ramdomly fillup the array "arr"
new Random(30).NextBytes(arr);
// implicitly cast the array
// "arr" to span<byte>
Span<byte> sp = arr;
// Task.Run() method executes
// the clear() method
// to clear the array for
// each thread operations
Task.Run(() => clear());
// call the function "print"
print(sp);
}
public static void clear()
{
// delay for 10ms
Task.Delay(10).Wait();
lock(arr)
// defines that one thread
// executes one task at one time
{
Array.Clear(arr, 0, arr.Length);
}
}
// print function
public static void print(Span<byte> span)
{
foreach(byte e in span)
{
Console.WriteLine(e);
Task.Delay(10).Wait();
}
}
}
输出:
52
239
0
0
属性:
- Current: 用于获取对枚举器当前位置项的引用。
方法:
- MoveNext(): 它将枚举器前进到跨度的下一项< T >。
要点:
- Span 提供对连续内存区域的类型安全访问。
- 不能在异步方法内使用。
- 它不实现 IEnumerator 或 IEnumerator < T > 接口,因为 Span < T >枚举器是一个引用结构。
- 它不包括重置方法。
- 要使用 Reset() 方法,它必须作为接口的一部分来实现。
- 它不包括额外的堆分配。
- 它不能用作泛型类型参数。
- Span 提供对存储器的读写访问。
- ReadOnlySpan < T > 提供对内存的只读访问。
版权属于:月萌API www.moonapi.com,转载请注明出处