ReadOnlySpan<T>.GetPinnableReference Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt einen schreibgeschützten Verweis auf ein Objekt vom Typ T zurück, das zum Anheften verwendet werden kann.
Diese Methode soll .NET-Compiler unterstützen und nicht durch Benutzercode aufgerufen werden.
public:
T& ^ GetPinnableReference();
public ref readonly T GetPinnableReference ();
member this.GetPinnableReference : unit -> 'T
Public Function GetPinnableReference () As T
Gibt zurück
- T
Ein Verweis auf das Element der Spanne bei Index 0 oder null
, wenn die Spanne leer ist
Beispiele
Das folgende Beispiel veranschaulicht das Erstellen eines ganzzahligen Arrays, das anheften und jedes Element in die Konsole schreibt.
using System;
// Note: you must compile this sample using the unsafe flag.
// From the command line, type the following: csc sample.cs /unsafe
public class Example
{
public static unsafe void Main()
{
int[] array = CreateInt32Array();
// Create a span, pin it, and print its elements.
Span<int> span = array.AsSpan();
fixed (int* spanPtr = span)
{
Console.WriteLine($"Span contains {span.Length} elements:");
for (int i = 0; i < span.Length; i++)
{
Console.WriteLine(spanPtr[i]);
}
Console.WriteLine();
}
// Create a read-only span, pin it, and print its elements.
ReadOnlySpan<int> readonlyspan = array.AsSpan();
fixed (int* readonlyspanPtr = readonlyspan)
{
Console.WriteLine($"ReadOnlySpan contains {readonlyspan.Length} elements:");
for (int i = 0; i < readonlyspan.Length; i++)
{
Console.WriteLine(readonlyspanPtr[i]);
}
Console.WriteLine();
}
}
private static int[] CreateInt32Array()
{
return new int[] { 100, 200, 300, 400, 500 };
}
}
// The example displays the following output:
// Span contains 5 elements:
// 100
// 200
// 300
// 400
// 500
//
// ReadOnlySpan contains 5 elements:
// 100
// 200
// 300
// 400
// 500
#nowarn "9"
#nowarn "51"
open System
open FSharp.NativeInterop
let createInt32Array () =
[| 100; 200; 300; 400; 500 |]
[<EntryPoint>]
let main _ =
let array = createInt32Array()
// Create a span, pin it, and print its elements.
let span = array.AsSpan()
let spanPtr = &&span.GetPinnableReference()
printfn $"Span contains {span.Length} elements:"
for i = 0 to span.Length - 1 do
printfn $"{NativePtr.get spanPtr i}"
printfn ""
// Create a read-only span, pin it, and print its elements.
let readonlyspan: ReadOnlySpan<int> = array.AsSpan()
let readonlyspanPtr = &&readonlyspan.GetPinnableReference()
printfn $"ReadOnlySpan contains {readonlyspan.Length} elements:"
for i = 0 to readonlyspan.Length - 1 do
printfn $"{NativePtr.get readonlyspanPtr i}"
printfn ""
0
// The example displays the following output:
// Span contains 5 elements:
// 100
// 200
// 300
// 400
// 500
//
// ReadOnlySpan contains 5 elements:
// 100
// 200
// 300
// 400
// 500
Hinweise
Anwendungen sollten nicht direkt aufrufen GetPinnableReference
. Stattdessen sollten Aufrufer die normale Anheftsyntax ihrer Sprache verwenden, z. B. die Anweisung von fixed
C#.
Wenn sie eine Anheftung anheftenReadOnlySpan<char>
, wird das resultierende Ergebnis char*
nicht als NULL-beendet angenommen. Dieses Verhalten unterscheidet sich von der Anheftung eines string
, wobei das resultierende Ergebnis char*
garantiert null beendet wird.