Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Span2D<T> Klasse spiegelt die Funktionalität des Span<T> Typs wieder, unterstützt aber 2D-Speicherbereiche. Ebenso wie Memory2D<T> ist es äußerst flexibel und kann zahlreiche verschiedene Objekte sowie native Zeiger oder GC-Verweise umschließen.
Das interne Layout ähnelt dem layout, das vom Memory2D<T> Typ verwendet wird. Sie enthält einen Pitch-Parameter, der die Unterstützung für nicht zusammenhängende Speicherpuffer ermöglicht. Weitere Informationen hierzu finden Sie in den Memory2D<T> Dokumenten.
Plattform-APIs:
Span2D<T>,Memory2D<T>,ReadOnlySpan2D<T>
Syntax
So erstellen Sie eine Span2D<T> Instanz aus einem 2D-Array:
int[,] array =
{
{ 1, 2, 3 },
{ 4, 5, 6 }
};
Span2D<int> span = array;
// The memory directly maps the 2*3 array here
span[0, 0] = 10;
span[1, 1] = 20;
// The array is now:
// { 10, 2, 3 },
// { 4, 20, 6 }
// We can also use indices, on supported runtimes
int x = span[0, ^1];
// We can also get references to items, like with arrays
ref int reference = ref span[1, 1];
Span2D<int> slice = span.Slice(0, 1, 2, 2);
// Or alternatively, on supported runtimes
slice = span[.., 1..];
int[,] copy = slice.ToArray();
// The resulting array is:
// { 2, 3 },
// { 20, 6 }
Sie können auch direkt eine 2D-Ansicht über nativen Speicher erstellen:
int* p = stackalloc int[9];
Span2D<int> span = new Span2D<int>(p, 3, 3);
Der Span2D<T> Typ enthält benutzerdefinierte Enumerationstypen, um eine bestimmte Zeile, Spalte oder den gesamten Speicherbereich mithilfe der Standardsyntax foreach in C# auf einfache Weise zu durchlaufen. Es unterstützt auch das Ausführen von Massenvorgängen in einem einzigen Anruf:
int[,] array =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
Span2D<int> span = array;
foreach (int i in span.GetColumn(1))
{
// 2, 5, 8
}
// We can also iterate by reference
foreach (ref int i in span.GetRow(2))
{
// 7, 8, 9
}
foreach (int i in span)
{
// 1, 2, 3, 4, 5...
}
// Set all items in a column to 0
span.GetColumn(0).Clear();
// Set the value of all items in a row
span.GetRow(1).Fill(42);
Span<int> copy = stackalloc int[3];
// Copy all items from a column
span.GetColumn(2).CopyTo(copy);
// Get a copy of a row as an array
int[] array = span.GetRow(1).ToArray();
ReadOnlySpan2D<T>
Der ReadOnlySpan2D<T>-Typ verhält sich zu Span2D<T> genau so, wie sich ReadOnlySpan<T> zu Span<T> verhält. Er macht einen ähnlichen Satz von APIs verfügbar, bietet jedoch keine Möglichkeit, den Inhalt des zugrunde liegenden Arbeitsspeicherbereichs direkt zu ändern.
Beispielcode
Weitere Beispiele finden Sie in den Komponententests.
.NET Community Toolkit