ReadOnlySpan<T>.GetPinnableReference Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Sabitleme için kullanılabilecek T türündeki bir nesneye salt okunur başvuru döndürür.
Bu yöntem .NET derleyicilerini desteklemeye yöneliktir ve kullanıcı kodu tarafından çağrılmak üzere tasarlanmamıştır.
public:
T& ^ GetPinnableReference();
public ref readonly T GetPinnableReference ();
member this.GetPinnableReference : unit -> 'T
Public Function GetPinnableReference () As T
Döndürülenler
0 dizinindeki span öğesine başvuru veya yayılma alanı boşsa null
.
Örnekler
Aşağıdaki örnekte bir tamsayı dizisi oluşturma, diziyi sabitleme ve her öğeyi konsola yazma işlemleri gösterilmektedir.
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
Açıklamalar
Uygulamalar doğrudan GetPinnableReference
çağırmamalıdır. Bunun yerine çağıranların, C# fixed
deyimi gibi dillerinin normal sabitleme söz dizimini kullanması gerekir.
bir ReadOnlySpan<char>
sabitleniyorsa, sonuçta elde edilen char*
null sonlandırıldığı varsayılmaz. Bu davranış, sonuçta elde edilen char*
null olarak sonlandırılacağı garanti edilen bir string
sabitlemesinden farklıdır.