Span<T> Struct

Definizione

Fornisce una rappresentazione indipendente dai tipi e sicura per la memoria di un'area contigua di memoria arbitraria.

generic <typename T>
public value class Span
[System.Runtime.InteropServices.Marshalling.NativeMarshalling(typeof(System.Runtime.InteropServices.Marshalling.SpanMarshaller<,>))]
public readonly ref struct Span<T>
public readonly ref struct Span<T>
[<System.Runtime.InteropServices.Marshalling.NativeMarshalling(typeof(System.Runtime.InteropServices.Marshalling.SpanMarshaller<,>))>]
type Span<'T> = struct
type Span<'T> = struct
Public Structure Span(Of T)

Parametri di tipo

T

Tipo di elementi in Span<T>.

Ereditarietà
Span<T>
Attributi

Commenti

Il Span<T> tipo è uno struct di riferimento allocato nello stack anziché nell'heap gestito. I tipi di struct ref hanno alcune restrizioni per assicurarsi che non possano essere promossi all'heap gestito, incluso che non possono essere:

  • Boxed.
  • Assegnato alle variabili di tipo Object o dynamico a qualsiasi tipo di interfaccia.
  • Campi in un tipo riferimento.
  • Usato oltre await i limiti e yield .

Inoltre, le chiamate ai due metodi, Equals(Object) e GetHashCode, lanciano un'eccezione NotSupportedException.

Important

Poiché si tratta di un tipo solo stack, Span<T> non è adatto per molti scenari che richiedono l'archiviazione di riferimenti ai buffer nell'heap. Questo vale, ad esempio, per le routine che effettuano chiamate asincrone al metodo. Per questi scenari, è possibile usare i tipi complementari System.Memory<T> e System.ReadOnlyMemory<T>.

Per gli intervalli che rappresentano strutture non modificabili o di sola lettura, usare System.ReadOnlySpan<T>.

Memory

Un Span<T> oggetto rappresenta un'area contigua di memoria arbitraria. Un'istanza Span<T> viene spesso utilizzata per contenere gli elementi di una matrice o una parte di una matrice. A differenza di una matrice, tuttavia, un'istanza Span<T> può puntare alla memoria gestita, alla memoria nativa o alla memoria gestita nello stack. L'esempio seguente crea un oggetto Span<Byte> da una matrice:

// Create a span over an array.
var array = new byte[100];
var arraySpan = new Span<byte>(array);

byte data = 0;
for (int ctr = 0; ctr < arraySpan.Length; ctr++)
    arraySpan[ctr] = data++;

int arraySum = 0;
foreach (var value in array)
    arraySum += value;

Console.WriteLine($"The sum is {arraySum}");
// Output:  The sum is 4950
// Create a span over an array.
let array = Array.zeroCreate<byte> 100
let arraySpan = Span<byte> array

let mutable data = 0uy
for i = 0 to arraySpan.Length - 1 do
    arraySpan[i] <- data
    data <- data + 1uy

let mutable arraySum = 0
for value in array do
    arraySum <- arraySum + int value

printfn $"The sum is {arraySum}"
// Output:  The sum is 4950

Nell'esempio seguente viene creato un oggetto Span<Byte> da 100 byte di memoria nativa:

// Create a span from native memory.
var native = Marshal.AllocHGlobal(100);
Span<byte> nativeSpan;
unsafe
{
    nativeSpan = new Span<byte>(native.ToPointer(), 100);
}
byte data = 0;
for (int ctr = 0; ctr < nativeSpan.Length; ctr++)
    nativeSpan[ctr] = data++;

int nativeSum = 0;
foreach (var value in nativeSpan)
    nativeSum += value;

Console.WriteLine($"The sum is {nativeSum}");
Marshal.FreeHGlobal(native);
// Output:  The sum is 4950
// Create a span from native memory.
let native = Marshal.AllocHGlobal 100
let nativeSpan = Span<byte>(native.ToPointer(), 100)

let mutable data = 0uy
for i = 0 to nativeSpan.Length - 1 do
    nativeSpan[i] <- data
    data <- data + 1uy

let mutable nativeSum = 0
for value in nativeSpan do
    nativeSum <- nativeSum + int value

printfn $"The sum is {nativeSum}"
Marshal.FreeHGlobal native
// Output:  The sum is 4950

L'esempio seguente usa la parola chiave stackalloc C# per allocare 100 byte di memoria nello stack:

// Create a span on the stack.
byte data = 0;
Span<byte> stackSpan = stackalloc byte[100];
for (int ctr = 0; ctr < stackSpan.Length; ctr++)
    stackSpan[ctr] = data++;

int stackSum = 0;
foreach (var value in stackSpan)
    stackSum += value;

Console.WriteLine($"The sum is {stackSum}");
// Output:  The sum is 4950
    // Create a span on the stack.
    let mutable data = 0uy
    let stackSpan = 
        let p = NativeInterop.NativePtr.stackalloc<byte> 100 |> NativeInterop.NativePtr.toVoidPtr
        Span<byte>(p, 100)

    for i = 0 to stackSpan.Length - 1 do
        stackSpan[i] <- data
        data <- data + 1uy

    let mutable stackSum = 0
    for value in stackSpan do
        stackSum <- stackSum + int value

    printfn $"The sum is {stackSum}"
// Output:  The sum is 4950

Poiché Span<T> è un'astrazione su un blocco arbitrario di memoria, i metodi del tipo e dei Span<T> metodi con Span<T> parametri operano su qualsiasi Span<T> oggetto indipendentemente dal tipo di memoria incapsulato. Ad esempio, ciascuna delle sezioni separate del codice che inizializza l'intervallo e calcola la somma dei suoi elementi può essere ristrutturata in singoli metodi di inizializzazione e calcolo, come illustrato nel seguente esempio.

public static void WorkWithSpans()
{
    // Create a span over an array.
    var array = new byte[100];
    var arraySpan = new Span<byte>(array);

    InitializeSpan(arraySpan);
    Console.WriteLine($"The sum is {ComputeSum(arraySpan):N0}");

    // Create an array from native memory.
    var native = Marshal.AllocHGlobal(100);
    Span<byte> nativeSpan;
    unsafe
    {
        nativeSpan = new Span<byte>(native.ToPointer(), 100);
    }

    InitializeSpan(nativeSpan);
    Console.WriteLine($"The sum is {ComputeSum(nativeSpan):N0}");

    Marshal.FreeHGlobal(native);

    // Create a span on the stack.
    Span<byte> stackSpan = stackalloc byte[100];

    InitializeSpan(stackSpan);
    Console.WriteLine($"The sum is {ComputeSum(stackSpan):N0}");
}

public static void InitializeSpan(Span<byte> span)
{
    byte value = 0;
    for (int ctr = 0; ctr < span.Length; ctr++)
        span[ctr] = value++;
}

public static int ComputeSum(Span<byte> span)
{
    int sum = 0;
    foreach (var value in span)
        sum += value;

    return sum;
}
// The example displays the following output:
//    The sum is 4,950
//    The sum is 4,950
//    The sum is 4,950
open System
open System.Runtime.InteropServices
open FSharp.NativeInterop

// Package FSharp.NativeInterop.NativePtr.stackalloc for reuse.
let inline stackalloc<'a when 'a: unmanaged> length : Span<'a> =
    let voidPointer = NativePtr.stackalloc<'a> length |> NativePtr.toVoidPtr
    Span<'a>(voidPointer, length)

let initializeSpan (span: Span<byte>) =
    let mutable value = 0uy
    for i = 0 to span.Length - 1 do
        span[i] <- value
        value <- value + 1uy

let computeSum (span: Span<byte>) =
    let mutable sum = 0
    for value in span do
        sum <- sum + int value
    sum

let workWithSpans () =
    // Create a span over an array.
    let array = Array.zeroCreate<byte> 100
    let arraySpan = Span<byte> array

    initializeSpan arraySpan
    printfn $"The sum is {computeSum arraySpan:N0}"

    // Create an array from native memory.
    let native = Marshal.AllocHGlobal 100
    let nativeSpan = Span<byte>(native.ToPointer(), 100)

    initializeSpan nativeSpan
    printfn $"The sum is {computeSum nativeSpan:N0}"

    Marshal.FreeHGlobal native

    // Create a span on the stack.
    let stackSpan = stackalloc 100

    initializeSpan stackSpan
    printfn $"The sum is {computeSum stackSpan:N0}"

// The example displays the following output:
//    The sum is 4,950
//    The sum is 4,950
//    The sum is 4,950

Matrici

Quando esegue il wrapping di una matrice, Span<T> può eseguire il wrapping di un'intera matrice, come negli esempi nella sezione Memoria . Poiché supporta il sezionamento, Span<T> può anche puntare a qualsiasi intervallo contiguo all'interno della matrice.

Nell'esempio seguente viene creata una sezione dei cinque elementi centrali di una matrice integer a 10 elementi. Si noti che il codice raddoppia i valori di ogni numero intero nella slice. Come illustrato nell'output, le modifiche apportate dall'intervallo vengono riflesse nei valori della matrice.

using System;

var array = new int[] { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
var slice = new Span<int>(array, 2, 5);
for (int ctr = 0; ctr < slice.Length; ctr++)
    slice[ctr] *= 2;

// Examine the original array values.
foreach (var value in array)
    Console.Write($"{value}  ");
Console.WriteLine();

// The example displays the following output:
//      2  4  12  16  20  24  28  16  18  20
module Program

open System

[<EntryPoint>]
let main _ =
    let array = [| 2; 4; 6; 8; 10; 12; 14; 16; 18; 20 |]
    let slice = Span<int>(array, 2, 5)
    for i = 0 to slice.Length - 1 do
        slice[i] <- slice[i] * 2

    // Examine the original array values.
    for value in array do
        printf $"{value}  "
    printfn ""
    0
// The example displays the following output:
//      2  4  12  16  20  24  28  16  18  20

Sezioni

Span<T> include due sovraccarichi del Slice metodo che formano un segmento dall'intervallo corrente che inizia in corrispondenza di un indice specificato. In questo modo è possibile considerare i dati in come Span<T> un set di blocchi logici che possono essere elaborati in base alle esigenze da parti di una pipeline di elaborazione dati con un impatto minimo sulle prestazioni. Ad esempio, poiché i protocolli server moderni sono spesso basati su testo, la manipolazione di stringhe e sottostringhe è particolarmente importante. Nella classe String, il metodo principale per l'estrazione di sottostringhe è Substring. Per le pipeline di dati che si basano su una manipolazione estesa delle stringhe, il suo utilizzo comporta alcune penalità per le prestazioni, poiché esso:

  1. Crea una nuova stringa per contenere la sottostringa.
  2. Copia un subset dei caratteri dalla stringa originale alla nuova stringa.

Questa operazione di allocazione e copia può essere eliminata usando Span<T> o ReadOnlySpan<T>, come illustrato nell'esempio seguente:

using System;

class Program2
{
    static void Run()
    {
        string contentLength = "Content-Length: 132";
        var length = GetContentLength(contentLength.ToCharArray());
        Console.WriteLine($"Content length: {length}");
    }

    private static int GetContentLength(ReadOnlySpan<char> span)
    {
        var slice = span.Slice(16);
        return int.Parse(slice);
    }
}
// Output:
//      Content length: 132
module Program2

open System

let getContentLength (span: ReadOnlySpan<char>) =
    let slice = span.Slice 16
    Int32.Parse slice

let contentLength = "Content-Length: 132"
let length = getContentLength (contentLength.ToCharArray())
printfn $"Content length: {length}"
// Output:
//      Content length: 132

Costruttori

Nome Descrizione
Span<T>(T)

Crea un nuovo Span<T> valore di lunghezza 1 intorno al riferimento specificato.

Span<T>(T[], Int32, Int32)

Crea un nuovo Span<T> oggetto che include un numero specificato di elementi di una matrice a partire da un indice specificato.

Span<T>(T[])

Crea un nuovo Span<T> oggetto sull'intera matrice specificata.

Span<T>(Void*, Int32)

Crea un nuovo Span<T> oggetto da un numero specificato di elementi a partire da un indirizzo di T memoria specificato.

Proprietà

Nome Descrizione
Empty

Restituisce un oggetto vuoto Span<T> .

IsEmpty

Restituisce un valore che indica se l'oggetto corrente Span<T> è vuoto.

Item[Int32]

Ottiene l'elemento in corrispondenza dell'indice in base zero specificato.

Length

Restituisce la lunghezza dell'intervallo corrente.

Metodi

Nome Descrizione
Clear()

Cancella il contenuto di questo Span<T> oggetto.

CopyTo(Span<T>)

Copia il contenuto di questo Span<T> oggetto in una destinazione Span<T>.

Equals(Object)
Obsoleti.
Obsoleti.

Le chiamate a questo metodo non sono supportate.

Fill(T)

Riempie gli elementi di questo intervallo con un valore specificato.

GetEnumerator()

Restituisce un enumeratore per l'oggetto Span<T>.

GetHashCode()
Obsoleti.

Genera un oggetto NotSupportedException.

GetPinnableReference()

Restituisce un riferimento a un oggetto di tipo T che può essere utilizzato per l'aggiunta.

Questo metodo è progettato per supportare .NET compilatori e non deve essere chiamato dal codice utente.

Slice(Int32, Int32)

Forma una sezione dall'intervallo corrente a partire da un indice specificato per una lunghezza specificata.

Slice(Int32)

Forma una sezione dall'intervallo corrente che inizia in corrispondenza di un indice specificato.

ToArray()

Copia il contenuto di questo intervallo in una nuova matrice.

ToString()

Restituisce la rappresentazione di stringa di questo Span<T> oggetto.

TryCopyTo(Span<T>)

Tenta di copiare l'oggetto corrente Span<T> in una destinazione Span<T> e restituisce un valore che indica se l'operazione di copia è riuscita.

Operatori

Nome Descrizione
Equality(Span<T>, Span<T>)

Restituisce un valore che indica se due Span<T> oggetti sono uguali.

Implicit(ArraySegment<T> to Span<T>)

Definisce una conversione implicita di un oggetto ArraySegment<T> in un oggetto Span<T>.

Implicit(Span<T> to ReadOnlySpan<T>)

Definisce una conversione implicita di un oggetto Span<T> in un oggetto ReadOnlySpan<T>.

Implicit(T[] to Span<T>)

Definisce una conversione implicita di una matrice in un oggetto Span<T>.

Inequality(Span<T>, Span<T>)

Restituisce un valore che indica se due Span<T> oggetti non sono uguali.

Metodi di estensione

Nome Descrizione
BinarySearch<T,TComparable>(Span<T>, TComparable)

Cerca un intero oggetto ordinato per un valore usando il tipo generico Span<T> specificato TComparable .

BinarySearch<T,TComparer>(Span<T>, T, TComparer)

Cerca un intero oggetto ordinato Span<T> per un valore specificato usando il tipo generico specificato TComparer .

BinarySearch<T>(Span<T>, IComparable<T>)

Cerca un intero oggetto ordinato Span<T> per un valore usando l'interfaccia generica specificata IComparable<T> .

CommonPrefixLength<T>(Span<T>, ReadOnlySpan<T>, IEqualityComparer<T>)

Trova la lunghezza di qualsiasi prefisso comune condiviso tra span e other.

CommonPrefixLength<T>(Span<T>, ReadOnlySpan<T>)

Trova la lunghezza di qualsiasi prefisso comune condiviso tra span e other.

Contains<T>(Span<T>, T)

Indica se un valore specificato viene trovato in un intervallo.

ContainsAny<T>(Span<T>, ReadOnlySpan<T>)

Cerca un'occorrenza di uno dei valori specificati values e restituisce true se trovato. Se non viene trovato, restituisce false.

ContainsAny<T>(Span<T>, SearchValues<T>)

Cerca un'occorrenza di uno dei valori specificati values e restituisce true se trovato. Se non viene trovato, restituisce false.

ContainsAny<T>(Span<T>, T, T, T)

Cerca un'occorrenza di value0, value1o value2 nell'intervallo specificato.

ContainsAny<T>(Span<T>, T, T)

Cerca un'occorrenza di value0 o value1e restituisce true se trovato. Se non viene trovato, restituisce false.

ContainsAnyExcept<T>(Span<T>, ReadOnlySpan<T>)

Cerca nell'intervallo specificato qualsiasi valore diverso dall'oggetto specificato values.

ContainsAnyExcept<T>(Span<T>, SearchValues<T>)

Cerca nell'intervallo specificato qualsiasi valore diverso dall'oggetto specificato values.

ContainsAnyExcept<T>(Span<T>, T, T, T)

Cerca qualsiasi valore diverso da value0, value1o value2.

ContainsAnyExcept<T>(Span<T>, T, T)

Cerca qualsiasi valore diverso da value0 o value1nell'intervallo specificato.

ContainsAnyExcept<T>(Span<T>, T)

Cerca nell'intervallo specificato qualsiasi valore diverso dall'oggetto specificato value.

ContainsAnyExceptInRange<T>(Span<T>, T, T)

Cerca qualsiasi valore al di fuori dell'intervallo compreso tra lowInclusive e highInclusive, inclusivo.

ContainsAnyInRange<T>(Span<T>, T, T)

Cerca qualsiasi valore nell'intervallo compreso tra lowInclusive e highInclusive, inclusivo e restituisce true se trovato. Se non viene trovato, restituisce false.

Count<T>(Span<T>, ReadOnlySpan<T>)

Conta il numero di volte in cui si verifica l'oggetto specificato value nell'oggetto span.

Count<T>(Span<T>, T)

Conta il numero di volte in cui si verifica l'oggetto specificato value nell'oggetto span.

EndsWith<T>(Span<T>, ReadOnlySpan<T>)

Determina se la sequenza specificata viene visualizzata alla fine di un intervallo.

IndexOf<T>(Span<T>, ReadOnlySpan<T>)

Cerca la sequenza specificata e restituisce l'indice della prima occorrenza.

IndexOf<T>(Span<T>, T)

Cerca il valore specificato e restituisce l'indice della prima occorrenza.

IndexOfAny<T>(Span<T>, ReadOnlySpan<T>)

Cerca il primo indice di uno dei valori specificati.

IndexOfAny<T>(Span<T>, SearchValues<T>)

Cerca il primo indice di uno dei valori specificati.

IndexOfAny<T>(Span<T>, T, T, T)

Cerca il primo indice di uno dei valori specificati.

IndexOfAny<T>(Span<T>, T, T)

Cerca il primo indice di uno dei valori specificati.

IndexOfAnyExcept<T>(Span<T>, ReadOnlySpan<T>)

Cerca il primo indice di qualsiasi valore diverso dall'oggetto specificato values.

IndexOfAnyExcept<T>(Span<T>, SearchValues<T>)

Cerca il primo indice di qualsiasi valore diverso dall'oggetto specificato values.

IndexOfAnyExcept<T>(Span<T>, T, T, T)

Cerca il primo indice di qualsiasi valore diverso da value0, value1o value2.

IndexOfAnyExcept<T>(Span<T>, T, T)

Cerca il primo indice di qualsiasi valore diverso dai due valori specificati.

IndexOfAnyExcept<T>(Span<T>, T)

Cerca il primo indice di qualsiasi valore diverso dall'oggetto specificato value.

IndexOfAnyExceptInRange<T>(Span<T>, T, T)

Cerca il primo indice di qualsiasi valore al di fuori dell'intervallo tra lowInclusive e highInclusive, inclusivo.

IndexOfAnyInRange<T>(Span<T>, T, T)

Cerca il primo indice di qualsiasi valore nell'intervallo compreso tra lowInclusive e highInclusive, inclusi.

LastIndexOf<T>(Span<T>, ReadOnlySpan<T>)

Cerca la sequenza specificata e restituisce l'indice dell'ultima occorrenza.

LastIndexOf<T>(Span<T>, T)

Cerca il valore specificato e restituisce l'indice dell'ultima occorrenza.

LastIndexOfAny<T>(Span<T>, ReadOnlySpan<T>)

Cerca l'ultimo indice di uno dei valori specificati.

LastIndexOfAny<T>(Span<T>, SearchValues<T>)

Cerca l'ultimo indice di uno dei valori specificati.

LastIndexOfAny<T>(Span<T>, T, T, T)

Cerca l'ultimo indice di uno dei valori specificati.

LastIndexOfAny<T>(Span<T>, T, T)

Cerca l'ultimo indice di uno dei valori specificati.

LastIndexOfAnyExcept<T>(Span<T>, ReadOnlySpan<T>)

Cerca l'ultimo indice di qualsiasi valore diverso dall'oggetto specificato values.

LastIndexOfAnyExcept<T>(Span<T>, SearchValues<T>)

Cerca l'ultimo indice di qualsiasi valore diverso dall'oggetto specificato values.

LastIndexOfAnyExcept<T>(Span<T>, T, T, T)

Cerca l'ultimo indice di qualsiasi valore diverso da , value0o value1specificatovalue2.

LastIndexOfAnyExcept<T>(Span<T>, T, T)

Cerca l'ultimo indice di qualsiasi valore diverso dall'oggetto specificato value0 o value1.

LastIndexOfAnyExcept<T>(Span<T>, T)

Cerca l'ultimo indice di qualsiasi valore diverso dall'oggetto specificato value.

LastIndexOfAnyExceptInRange<T>(Span<T>, T, T)

Cerca l'ultimo indice di qualsiasi valore al di fuori dell'intervallo tra lowInclusive e highInclusive, inclusivo.

LastIndexOfAnyInRange<T>(Span<T>, T, T)

Cerca l'ultimo indice di qualsiasi valore nell'intervallo compreso tra lowInclusive e highInclusive, inclusi.

Overlaps<T>(Span<T>, ReadOnlySpan<T>, Int32)

Determina se un intervallo e un intervallo di sola lettura si sovrappongono nella memoria e restituisce l'offset dell'elemento.

Overlaps<T>(Span<T>, ReadOnlySpan<T>)

Determina se un intervallo e un intervallo di sola lettura si sovrappongono in memoria.

Replace<T>(Span<T>, T, T, IEqualityComparer<T>)

Sostituire tutte le occorrenze di oldValue con newValue.

Replace<T>(Span<T>, T, T)

Sostituire tutte le occorrenze di oldValue con newValue.

ReplaceAny<T>(Span<T>, SearchValues<T>, T)

Sostituisce in span tutte le occorrenze di uno degli elementi in values con newValue.

ReplaceAnyExcept<T>(Span<T>, SearchValues<T>, T)

Sostituisce in span tutti gli elementi, diversi da quelli in values, con newValue.

Reverse<T>(Span<T>)

Inverte la sequenza degli elementi nell'intero intervallo.

SequenceCompareTo<T>(Span<T>, ReadOnlySpan<T>)

Determina l'ordine relativo di un intervallo e un intervallo di sola lettura confrontando gli elementi usando IComparable{T}. CompareTo(T).

SequenceEqual<T>(Span<T>, ReadOnlySpan<T>, IEqualityComparer<T>)

Determina se due sequenze sono uguali confrontando gli elementi usando un oggetto IEqualityComparer<T>.

SequenceEqual<T>(Span<T>, ReadOnlySpan<T>)

Determina se un intervallo e un intervallo di sola lettura sono uguali confrontando gli elementi usando IEquatable{T}. Equals(T).

Sort<T,TComparer>(Span<T>, TComparer)

Ordina gli elementi nell'intero Span<T> oggetto utilizzando .TComparer

Sort<T>(Span<T>, Comparison<T>)

Ordina gli elementi nell'intero Span<T> oggetto utilizzando l'oggetto specificato Comparison<T>.

Sort<T>(Span<T>)

Ordina gli elementi nell'intero Span<T> oggetto utilizzando l'implementazione IComparable<T> di ogni elemento dell'oggetto Span<T>.

Sort<TKey,TValue,TComparer>(Span<TKey>, Span<TValue>, TComparer)

Ordina una coppia di intervalli (uno contenente le chiavi e l'altro contenente gli elementi corrispondenti) in base alle chiavi nel primo Span<T> utilizzando l'operatore di confronto specificato.

Sort<TKey,TValue>(Span<TKey>, Span<TValue>, Comparison<TKey>)

Ordina una coppia di intervalli (uno contenente le chiavi e l'altro contenente gli elementi corrispondenti) in base alle chiavi nel primo Span<T> usando il confronto specificato.

Sort<TKey,TValue>(Span<TKey>, Span<TValue>)

Ordina una coppia di intervalli (uno contenente le chiavi e l'altro contenente gli elementi corrispondenti) in base alle chiavi del primo Span<T> usando l'implementazione IComparable<T> di ogni chiave.

StartsWith<T>(Span<T>, ReadOnlySpan<T>)

Determina se una sequenza specificata viene visualizzata all'inizio di un intervallo.

ToImmutableArray<T>(Span<T>)

Converte l'intervallo in una matrice non modificabile.

Trim<T>(Span<T>, ReadOnlySpan<T>)

Rimuove tutte le occorrenze iniziali e finali di un set di elementi specificato in un intervallo di sola lettura da un intervallo.

Trim<T>(Span<T>, T)

Rimuove tutte le occorrenze iniziali e finali di un elemento specificato da un intervallo.

TrimEnd<T>(Span<T>, ReadOnlySpan<T>)

Rimuove tutte le occorrenze finali di un set di elementi specificato in un intervallo di sola lettura da un intervallo.

TrimEnd<T>(Span<T>, T)

Rimuove tutte le occorrenze finali di un elemento specificato da un intervallo.

TrimStart<T>(Span<T>, ReadOnlySpan<T>)

Rimuove tutte le occorrenze iniziali di un set di elementi specificato in un intervallo di sola lettura dall'intervallo.

TrimStart<T>(Span<T>, T)

Rimuove tutte le occorrenze iniziali di un elemento specificato dall'intervallo.

Si applica a

Vedi anche