Span<T> Structure

Définition

Fournit une représentation de type sécurisé et de mémoire sécurisée d’une région contiguë de mémoire arbitraire.

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)

Paramètres de type

T

Type d’éléments dans le Span<T>.

Héritage
Span<T>
Attributs

Remarques

Le Span<T> type est un ref struct qui est alloué sur la pile plutôt que dans le tas géré. Les types de struct ref ont certaines restrictions pour s’assurer qu’ils ne peuvent pas être promus vers le tas managé, y compris qu’ils ne peuvent pas être :

  • Boîte.
  • Affecté à des variables de type Object ou dynamic, ou à n’importe quelle frappe d’interface.
  • Champs d’un type référence.
  • Utilisé à travers await et yield limites.

En outre, les appels à deux méthodes, Equals(Object) et GetHashCode, lèvent un NotSupportedException.

Important

Étant donné qu’il s’agit d’un type stack-only, Span<T> il n’est pas adapté à de nombreux scénarios qui nécessitent le stockage de références aux mémoires tampons sur le tas. C’est vrai, par exemple, des routines qui effectuent des appels de méthode asynchrones. Pour ces scénarios, vous pouvez utiliser les types complémentaires System.Memory<T> et System.ReadOnlyMemory<T>.

Pour les étendues qui représentent des structures immuables ou en lecture seule, utilisez System.ReadOnlySpan<T>.

Mémoire

Span<T> représente une région contiguë de mémoire arbitraire. Une Span<T> instance est souvent utilisée pour contenir les éléments d’un tableau ou une partie d’un tableau. Contrairement à un tableau, toutefois, une Span<T> instance peut pointer vers la mémoire managée, la mémoire native ou la mémoire gérée sur la pile. L’exemple suivant crée un Span<Byte> à partir d’un tableau :

// 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

L’exemple suivant crée un objet Span<Byte> à partir de 100 octets de mémoire native :

// 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’exemple suivant utilise le mot clé stackalloc C# pour allouer 100 octets de mémoire sur la pile :

// 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

Étant donné qu’il Span<T> s’agit d’une abstraction sur un bloc de mémoire arbitraire, les méthodes du Span<T> type et des méthodes avec Span<T> des paramètres fonctionnent sur n’importe quel Span<T> objet quel que soit le type de mémoire qu’il encapsule. Par exemple, chacune des sections distinctes du code qui initialisent l’étendue et calcule la somme de ses éléments peut être refactorisée en méthodes d’initialisation et de calcul uniques, comme l’illustre l’exemple suivant :

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

Tableaux

Lorsqu’il encapsule un tableau, Span<T> il peut encapsuler un tableau entier, comme dans les exemples de la section Mémoire . Comme il prend en charge le découpage, Span<T> peut également pointer vers n’importe quelle plage contiguë dans le tableau.

L’exemple suivant crée une tranche des cinq éléments du milieu d’un tableau entier de 10 éléments. Notez que le code double les valeurs de chaque entier dans la tranche. Comme on peut le voir dans le résultat, les modifications effectuées par le segment sont reflétées dans les valeurs du tableau.

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

Tranches

Span<T> inclut deux surcharges de la méthode Slice qui créent un segment de l’étendue actuelle commençant à un indice spécifié. Cela permet de traiter les données dans un Span<T> ensemble de blocs logiques qui peuvent être traités selon les besoins d’un pipeline de traitement des données avec un impact minimal sur les performances. Par exemple, étant donné que les protocoles serveur modernes sont souvent basés sur du texte, la manipulation de chaînes et de sous-chaînes est particulièrement importante. Dans la String classe, la méthode principale d’extraction de sous-chaînes est Substring. Pour les pipelines de données qui s’appuient sur une manipulation de chaîne étendue, son utilisation offre des pénalités de performances, car elle :

  1. Crée une nouvelle chaîne pour contenir la sous-chaîne.
  2. Copie un sous-ensemble des caractères de la chaîne d’origine vers la nouvelle chaîne.

Cette opération d’allocation et de copie peut être supprimée en utilisant soit Span<T> soit ReadOnlySpan<T>, comme le montre l’exemple suivant :

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

Constructeurs

Nom Description
Span<T>(T)

Crée une longueur Span<T> de longueur 1 autour de la référence spécifiée.

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

Crée un Span<T> objet qui inclut un nombre spécifié d’éléments d’un tableau commençant à un index spécifié.

Span<T>(T[])

Crée un Span<T> objet sur l’intégralité d’un tableau spécifié.

Span<T>(Void*, Int32)

Crée un Span<T> objet à partir d’un nombre spécifié d’éléments T commençant à une adresse mémoire spécifiée.

Propriétés

Nom Description
Empty

Retourne un objet vide Span<T> .

IsEmpty

Retourne une valeur qui indique si le courant Span<T> est vide.

Item[Int32]

Obtient l’élément à l’index de base zéro spécifié.

Length

Retourne la longueur de l’étendue actuelle.

Méthodes

Nom Description
Clear()

Efface le contenu de cet Span<T> objet.

CopyTo(Span<T>)

Copie le contenu de ce Span<T> contenu dans une destination Span<T>.

Equals(Object)
Obsolète.
Obsolète.

Les appels à cette méthode ne sont pas pris en charge.

Fill(T)

Remplit les éléments de cette étendue avec une valeur spécifiée.

GetEnumerator()

Retourne un énumérateur pour ce Span<T>.

GetHashCode()
Obsolète.

Lève un NotSupportedException.

GetPinnableReference()

Retourne une référence à un objet de type T qui peut être utilisé pour l’épinglage.

Cette méthode est destinée à prendre en charge .NET compilateurs et n’est pas destinée à être appelée par le code utilisateur.

Slice(Int32, Int32)

Forme une tranche hors de l’étendue actuelle commençant à un index spécifié pour une longueur spécifiée.

Slice(Int32)

Forme une tranche hors de l’étendue actuelle qui commence à un index spécifié.

ToArray()

Copie le contenu de cette étendue dans un nouveau tableau.

ToString()

Retourne la représentation sous forme de chaîne de cet Span<T> objet.

TryCopyTo(Span<T>)

Tente de copier le courant Span<T> dans une destination Span<T> et retourne une valeur qui indique si l’opération de copie a réussi.

Opérateurs

Nom Description
Equality(Span<T>, Span<T>)

Retourne une valeur qui indique si deux Span<T> objets sont égaux.

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

Définit une conversion implicite d’un ArraySegment<T> en .Span<T>

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

Définit une conversion implicite d’un Span<T> en un ReadOnlySpan<T>.

Implicit(T[] to Span<T>)

Définit une conversion implicite d’un tableau en un Span<T>.

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

Retourne une valeur qui indique si deux Span<T> objets ne sont pas égaux.

Méthodes d’extension

Nom Description
BinarySearch<T,TComparable>(Span<T>, TComparable)

Recherche une valeur entière triée Span<T> à l’aide du type générique spécifié TComparable .

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

Recherche une valeur triée Span<T> entière à l’aide du type générique spécifié TComparer .

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

Recherche une valeur entière triée Span<T> à l’aide de l’interface générique spécifiée IComparable<T> .

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

Recherche la longueur d’un préfixe commun partagé entre span et other.

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

Recherche la longueur d’un préfixe commun partagé entre span et other.

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

Indique si une valeur spécifiée est trouvée dans une étendue.

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

Recherche une occurrence de l’un des résultats spécifiés values et retourne true s’il est trouvé. S’il n’est pas trouvé, retourne false.

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

Recherche une occurrence de l’un des résultats spécifiés values et retourne true s’il est trouvé. S’il n’est pas trouvé, retourne false.

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

Recherche une occurrence de value0, value1ou value2 dans l’étendue spécifiée.

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

Recherche une occurrence de ou value0, et retourne value1 s’il true est trouvé. S’il n’est pas trouvé, retourne false.

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

Recherche l’étendue spécifiée pour n’importe quelle valeur autre que celle spécifiée values.

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

Recherche l’étendue spécifiée pour n’importe quelle valeur autre que celle spécifiée values.

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

Recherche une valeur autre que value0, value1ou value2.

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

Recherche l’étendue spécifiée pour toute valeur autre que value0 ou value1.

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

Recherche l’étendue spécifiée pour n’importe quelle valeur autre que celle spécifiée value.

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

Recherche une valeur en dehors de la plage comprise entre lowInclusive et highInclusiveinclus.

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

Recherche une valeur quelconque dans la plage comprise entre lowInclusive et highInclusiveinclus et retourne true si elle est trouvée. S’il n’est pas trouvé, retourne false.

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

Compte le nombre de fois où la valeur spécifiée value se produit dans le span.

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

Compte le nombre de fois où la valeur spécifiée value se produit dans le span.

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

Détermine si la séquence spécifiée apparaît à la fin d’une étendue.

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

Recherche la séquence spécifiée et retourne l’index de sa première occurrence.

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

Recherche la valeur spécifiée et retourne l’index de sa première occurrence.

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

Recherche le premier index de l’une des valeurs spécifiées.

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

Recherche le premier index de l’une des valeurs spécifiées.

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

Recherche le premier index de l’une des valeurs spécifiées.

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

Recherche le premier index de l’une des valeurs spécifiées.

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

Recherche le premier index d’une valeur autre que la valeur spécifiée values.

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

Recherche le premier index d’une valeur autre que la valeur spécifiée values.

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

Recherche le premier index d’une valeur autre que value0, value1ou value2.

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

Recherche le premier index d’une valeur autre que les deux valeurs spécifiées.

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

Recherche le premier index d’une valeur autre que la valeur spécifiée value.

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

Recherche le premier index d’une valeur en dehors de la plage comprise entre lowInclusive et highInclusiveinclus.

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

Recherche le premier index d’une valeur comprise entre lowInclusive et highInclusiveinclus.

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

Recherche la séquence spécifiée et retourne l’index de sa dernière occurrence.

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

Recherche la valeur spécifiée et retourne l’index de sa dernière occurrence.

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

Recherche le dernier index de l’une des valeurs spécifiées.

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

Recherche le dernier index de l’une des valeurs spécifiées.

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

Recherche le dernier index de l’une des valeurs spécifiées.

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

Recherche le dernier index de l’une des valeurs spécifiées.

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

Recherche le dernier index d’une valeur autre que celle spécifiée values.

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

Recherche le dernier index d’une valeur autre que celle spécifiée values.

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

Recherche le dernier index de n’importe quelle valeur autre que le value0, value1ou value2.

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

Recherche le dernier index d’une valeur autre que celle spécifiée value0 ou value1.

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

Recherche le dernier index d’une valeur autre que celle spécifiée value.

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

Recherche le dernier index de n’importe quelle valeur en dehors de la plage comprise entre lowInclusive et highInclusiveinclus.

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

Recherche le dernier index d’une valeur comprise entre lowInclusive et highInclusiveinclus.

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

Détermine si une étendue et une étendue en lecture seule se chevauchent dans la mémoire et génère le décalage d’élément.

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

Détermine si une étendue et une étendue en lecture seule se chevauchent en mémoire.

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

Remplace toutes les occurrences de oldValue par newValue.

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

Remplace toutes les occurrences de oldValue par newValue.

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

Remplace dans span toutes les occurrences de l’un des éléments dans valuesnewValue .

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

Remplace dans span tous les éléments, autres que ceux de values, par newValue.

Reverse<T>(Span<T>)

Inverse la séquence des éléments dans l’étendue entière.

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

Détermine l’ordre relatif d’une étendue et une étendue en lecture seule en comparant les éléments à l’aide d’IComparable{T}. CompareTo(T).

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

Détermine si deux séquences sont égales en comparant les éléments à l’aide d’un IEqualityComparer<T>.

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

Détermine si une étendue et une étendue en lecture seule sont égales en comparant les éléments à l’aide d’IEquatable{T}. Equals(T).

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

Trie les éléments dans l’intégralité Span<T> à l’aide du TComparer.

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

Trie les éléments dans l’intégralité Span<T> à l’aide de l’élément spécifié Comparison<T>.

Sort<T>(Span<T>)

Trie les éléments dans l’ensemble Span<T> à l’aide de l’implémentation IComparable<T> de chaque élément du Span<T>.

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

Trie une paire d’étendues (une contenant les clés et l’autre contenant les éléments correspondants) en fonction des clés dans la première Span<T> à l’aide du comparateur spécifié.

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

Trie une paire d’étendues (une contenant les clés et l’autre contenant les éléments correspondants) en fonction des clés dans la première Span<T> à l’aide de la comparaison spécifiée.

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

Trie une paire d’étendues (une contenant les clés et l’autre contenant les éléments correspondants) en fonction des clés dans la première Span<T> à l’aide de l’implémentation IComparable<T> de chaque clé.

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

Détermine si une séquence spécifiée apparaît au début d’une étendue.

ToImmutableArray<T>(Span<T>)

Convertit l’étendue en tableau immuable.

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

Supprime toutes les occurrences de début et de fin d’un ensemble d’éléments spécifiés dans une étendue en lecture seule d’une étendue.

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

Supprime toutes les occurrences de début et de fin d’un élément spécifié d’une étendue.

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

Supprime toutes les occurrences de fin d’un ensemble d’éléments spécifiés dans une étendue en lecture seule d’une étendue.

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

Supprime toutes les occurrences de fin d’un élément spécifié d’une étendue.

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

Supprime toutes les occurrences principales d’un ensemble d’éléments spécifiés dans une étendue en lecture seule de l’étendue.

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

Supprime toutes les occurrences principales d’un élément spécifié de l’étendue.

S’applique à

Voir aussi