Span
在这里,Span
跨度
句法:
public struct Span.Enumerator
范围:
这里的参数是T ,其中T是Span
例子:
// C# program to demonstrate Span.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
Span 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 span)
{
foreach(byte e in span)
{
Console.WriteLine(e);
Task.Delay(10).Wait();
}
}
}
输出:
52
239
0
0
特性:
- 当前:用于获取枚举器当前位置的项目的引用。
方法:
- MoveNext():它将枚举数前进到Span
的下一项。
重要事项:
- Span
提供对内存连续区域的类型安全访问。 - 不能在异步方法中使用它。
- 它不实现IEnumerator或IEnumerator
接口,因为Span 枚举器是ref struct 。 - 它不包括Reset方法。
- 敌人使用Reset()方法,它必须作为接口的一部分实现。
- 它不包括其他堆分配。
- 它不能用作泛型类型参数。
- Span
提供对内存的读写访问。 - ReadOnlySpan
提供对内存的只读访问。