Span<T> Span<T> Span<T> Span<T> Struct

Определение

Предоставляет типобезопасную и безопасную для памяти реализацию непрерывной области произвольной памяти.Provides a type- and memory-safe representation of a contiguous region of arbitrary memory.

generic <typename T>
public value class Span
public struct Span<T>
type Span<'T> = struct
Public Structure Span(Of T)

Параметры типа

T

Тип элементов в Span<T>.The type of items in the Span<T>.

Наследование

Комментарии

Span<T> — это структура ссылки , которая выделяется в стеке, а не в управляемой куче.Span<T> is a ref struct that is allocated on the stack rather than on the managed heap. Типы структур ref имеют ряд ограничений, чтобы гарантировать, что их нельзя повысить до управляемой кучи, в том числе что они не могут быть упакованы, они не могут быть назначены переменным типа Object, dynamic или к любому типу интерфейса, они не могут быть полями в ссылочном типе и не могут использоваться в границах await и yield.Ref struct types have a number of restrictions to ensure that they cannot be promoted to the managed heap, including that they can't be boxed, they can't be assigned to variables of type Object, dynamic or to any interface type, they can't be fields in a reference type, and they can't be used across await and yield boundaries. Кроме того, вызовы двух методов, Equals(Object) и GetHashCode, вызывают исключение NotSupportedException.In addition, calls to two methods, Equals(Object) and GetHashCode, throw a NotSupportedException.

Важно!

Поскольку это тип только для стека, Span<T> не подходит для многих сценариев, требующих хранения ссылок на буферы в куче.Because it is a stack-only type, Span<T> is unsuitable for many scenarios that require storing references to buffers on the heap. Это верно, например, для подпрограмм, которые выполняют асинхронные вызовы методов.This is true, for example, of routines that make asynchronous method calls. В таких случаях можно использовать дополняющие типы System.Memory<T> и System.ReadOnlyMemory<T>.For such scenarios, you can use the complementary System.Memory<T> and System.ReadOnlyMemory<T> types.

Для диапазонов, которые представляют структуры с неизменяемыми или только для чтения, используйте System.ReadOnlySpan<T>.For spans that represent immutable or read-only structures, use System.ReadOnlySpan<T>.

Span @ no__t-0T > и памятьSpan<T> and memory

@No__t-0 представляет непрерывную область произвольной памяти.A Span<T> represents a contiguous region of arbitrary memory. Экземпляр Span<T> часто используется для хранения элементов массива или части массива.A Span<T> instance is often used to hold the elements of an array or a portion of an array. Однако в отличие от массива, экземпляр Span<T> может указывать на управляемую память, собственную память или управляемую память в стеке.Unlike an array, however, a Span<T> instance can point to managed memory, native memory, or memory managed on the stack. В следующем примере создается Span<Byte> из массива:The following example creates a Span<Byte> from an array:

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

В следующем примере создается Span<Byte> из 100 байт собственной памяти:The following example creates a Span<Byte> from 100 bytes of native memory:

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

В следующем примере ключевое C# слово stackalloc используется для выделения 100 байт памяти в стеке:The following example uses the C# stackalloc keyword to allocate 100 bytes of memory on the 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

Поскольку Span<T> является абстракцией для произвольного блока памяти, методы класса Span<T> и методы с параметрами Span<T> работают с любым объектом Span<T> независимо от типа памяти, которую он инкапсулирует.Because Span<T> is an abstraction over an arbitrary block of memory, methods of the Span<T> class and methods with Span<T> parameters operate on any Span<T> object regardless of the kind of memory it encapsulates. Например, каждый из отдельных разделов кода, которые инициализируют диапазон и вычисляют сумму его элементов, можно изменить в отдельные методы инициализации и вычисления, как показано в следующем примере:For example, each of the separate sections of code that initialize the span and calculate the sum of its elements can be changed into single initialization and calculation methods, as the following example illustrates:

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

Span @ no__t-0T > и массивыSpan<T> and arrays

Когда он создает оболочку для массива, Span<T> может переключить весь массив, как это делалось в примерах в разделе span @ no__t-2T > and Memory .When it wraps an array, Span<T> can wrap an entire array, as it did in the examples in the Span<T> and memory section. Так как он поддерживает срезы, Span<T> может также указывать на любой непрерывный диапазон в массиве.Because it supports slicing, Span<T> can also point to any contiguous range within the array.

В следующем примере создается срез средних пяти элементов массива целых чисел из 10 элементов.The following example creates a slice of the middle five elements of a 10-element integer array. Обратите внимание, что код удваивает значения каждого целого числа в срезе.Note that the code doubles the values of each integer in the slice. Как видно из выходных данных, изменения, внесенные диапазоном, отражаются в значениях массива.As the output shows, the changes made by the span are reflected in the values of the array.

using System;

namespace span
{
    class Program
    {
        static void Main(string[] args)
        {
            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

Охват @ no__t-0T > и срезыSpan<T> and slices

Span<T> содержит две перегрузки метода Slice, образующих срез из текущего диапазона, который начинается с указанного индекса.Span<T> includes two overloads of the Slice method that form a slice out of the current span that starts at a specified index. Это позволяет обрабатывать данные в Span<T> как набор логических блоков, которые могут обрабатываться по мере необходимости в частях конвейера обработки данных с минимальным влиянием на производительность.This makes it possible to treat the data in a Span<T> as a set of logical chunks that can be processed as needed by portions of a data processing pipeline with minimal performance impact. Например, так как современные серверные протоколы часто являются текстовыми, особенно важно манипулировать строками и подстроками.For example, since modern server protocols are often text-based, manipulation of strings and substrings is particularly important. В классе String основным методом извлечения подстрок является Substring.In the String class, the major method for extracting substrings is Substring. Для конвейеров данных, которые используют обширную обработку строк, ее использование обеспечивает некоторые снижения производительности, поскольку:For data pipelines that rely on extensive string manipulation, its use offers some performance penalties, since it:

  1. Создает новую строку для хранения подстроки.Creates a new string to hold the substring.

  2. Копирует подмножество символов из исходной строки в новую строку.Copies a subset of the characters from the original string to the new string.

Эту операцию выделения и копирования можно исключить с помощью Span<T> или ReadOnlySpan<T>, как показано в следующем примере:This allocation and copy operation can be eliminated by using either Span<T> or ReadOnlySpan<T>, as the following example shows:

using System;

class Program
{
    static void Main()
    {
        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

Конструкторы

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

Создает новый объект Span<T> по всему указанному массиву.Creates a new Span<T> object over the entirety of a specified array.

Span<T>(Void*, Int32) Span<T>(Void*, Int32) Span<T>(Void*, Int32) Span<T>(Void*, Int32)

Создает объект Span<T> из указанного числа элементов T, начиная с заданного адреса памяти.Creates a new Span<T> object from a specified number of T elements starting at a specified memory address.

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

Создает новый объект Span<T>, который включает указанное число элементов массива, начиная с указанного индекса.Creates a new Span<T> object that includes a specified number of elements of an array starting at a specified index.

Свойства

Empty Empty Empty Empty

Возвращает пустой объект Span<T>.Returns an empty Span<T> object.

IsEmpty IsEmpty IsEmpty IsEmpty

Возвращает значение, указывающее, пуст ли текущий объект Span<T>.Returns a value that indicates whether the current Span<T> is empty.

Item[Int32] Item[Int32] Item[Int32] Item[Int32]

Возвращает элемент по указанному индексу, начинающемуся с нуля.Gets the element at the specified zero-based index.

Length Length Length Length

Возвращает длину текущего диапазона.Returns the length of the current span.

Методы

Clear() Clear() Clear() Clear()

Удаляет содержимое этого объекта Span<T>.Clears the contents of this Span<T> object.

CopyTo(Span<T>) CopyTo(Span<T>) CopyTo(Span<T>) CopyTo(Span<T>)

Копирует содержимое этого объекта Span<T> в назначение Span<T>.Copies the contents of this Span<T> into a destination Span<T>.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Вызов этого метода не поддерживается.Calls to this method are not supported.

Fill(T) Fill(T) Fill(T) Fill(T)

Заполняет элементы диапазона заданным значением.Fills the elements of this span with a specified value.

GetEnumerator() GetEnumerator() GetEnumerator() GetEnumerator()

Возвращает перечислитель для коллекции Span<T>.Returns an enumerator for this Span<T>.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Создает исключение NotSupportedException.Throws a NotSupportedException.

GetPinnableReference() GetPinnableReference() GetPinnableReference() GetPinnableReference()

Возвращает ссылку на элемент Span<T> при нулевом индексе.Returns a reference to the element of the Span<T> at index zero.

Slice(Int32) Slice(Int32) Slice(Int32) Slice(Int32)

Формирует срез вне текущего диапазона, который начинается с указанного индекса.Forms a slice out of the current span that begins at a specified index.

Slice(Int32, Int32) Slice(Int32, Int32) Slice(Int32, Int32) Slice(Int32, Int32)

Формирует срез вне текущей области, начиная с указанного индекса до указанной длины.Forms a slice out of the current span starting at a specified index for a specified length.

ToArray() ToArray() ToArray() ToArray()

Копирует содержимое этого диапазона в новый массив.Copies the contents of this span into a new array.

ToString() ToString() ToString() ToString()

Возвращает строковое представление конкретного объекта Span<T>.Returns the string representation of this Span<T> object.

TryCopyTo(Span<T>) TryCopyTo(Span<T>) TryCopyTo(Span<T>) TryCopyTo(Span<T>)

Пытается скопировать текущий Span<T> в назначение Span<T> и возвращает значение, указывающее, успешно ли выполнена операция копирования.Attempts to copy the current Span<T> to a destination Span<T> and returns a value that indicates whether the copy operation succeeded.

Операторы

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

Возвращает значение, указывающее, равны ли два объекта Span<T>.Returns a value that indicates whether two Span<T> objects are equal.

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

Определяет неявное преобразование ArraySegment<T> в Span<T>.Defines an implicit conversion of an ArraySegment<T> to a Span<T>.

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

Определяет неявное преобразование Span<T> в ReadOnlySpan<T>.Defines an implicit conversion of a Span<T> to a ReadOnlySpan<T>.

Implicit(T[] to Span<T>) Implicit(T[] to Span<T>) Implicit(T[] to Span<T>) Implicit(T[] to Span<T>)

Определяет неявное преобразование массива в Span<T>.Defines an implicit conversion of an array to a Span<T>.

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

Возвращает значение, указывающее, являются ли два объекта Span<T> неравными.Returns a value that indicates whether two Span<T> objects are not equal.

Методы расширения

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

Выполняет поиск значения во всем отсортированном массиве Span<T>, используя заданный универсальный интерфейс IComparable<T>.Searches an entire sorted Span<T> for a value using the specified IComparable<T> generic interface.

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

Выполняет поиск указанного значения во всем отсортированном массиве Span<T>, используя заданный универсальный тип TComparer.Searches an entire sorted Span<T> for a specified value using the specified TComparer generic type.

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

Выполняет поиск значения во всем отсортированном массиве Span<T>, используя заданный универсальный тип TComparable.Searches an entire sorted Span<T> for a value using the specified TComparable generic type.

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

Указывает, найдено ли указанное значение в диапазоне.Indicates whether a specified value is found in a span. Значения сравниваются с помощью IEquatable {T}.Equals (T).Values are compared using IEquatable{T}.Equals(T).

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

Определяет, отображается ли указанная последовательность в конце диапазона.Determines whether the specified sequence appears at the end of a span.

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

Выполняет поиск указанного значения и возвращает индекс его первого вхождения.Searches for the specified value and returns the index of its first occurrence. Значения сравниваются с помощью IEquatable {T}.Equals (T).Values are compared using IEquatable{T}.Equals(T).

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

Выполняет поиск указанной последовательности и возвращает индекс ее первого вхождения.Searches for the specified sequence and returns the index of its first occurrence. Значения сравниваются с помощью IEquatable {T}.Equals (T).Values are compared using IEquatable{T}.Equals(T).

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

Выполняет поиск первого индекса любого из указанных значений аналогичного вызову IndexOf несколько раз с помощью логического оператора ИЛИ.Searches for the first index of any of the specified values similar to calling IndexOf several times with the logical OR operator.

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

Выполняет поиск первого индекса любого из указанных значений аналогичного вызову IndexOf несколько раз с помощью логического оператора ИЛИ.Searches for the first index of any of the specified values similar to calling IndexOf several times with the logical OR operator.

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

Выполняет поиск первого индекса любого из указанных значений аналогичного вызову IndexOf несколько раз с помощью логического оператора ИЛИ.Searches for the first index of any of the specified values similar to calling IndexOf several times with the logical OR operator.

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

Выполняет поиск указанного значения и возвращает индекс его последнего вхождения.Searches for the specified value and returns the index of its last occurrence. Значения сравниваются с помощью IEquatable {T}.Equals (T).Values are compared using IEquatable{T}.Equals(T).

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

Выполняет поиск указанной последовательности и возвращает индекс ее последнего вхождения.Searches for the specified sequence and returns the index of its last occurrence. Значения сравниваются с помощью IEquatable {T}.Equals (T).Values are compared using IEquatable{T}.Equals(T).

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

Выполняет поиск последнего индекса любого из указанных значений аналогичного вызову LastIndexOf несколько раз с помощью логического оператора ИЛИ.Searches for the last index of any of the specified values similar to calling LastIndexOf several times with the logical OR operator.

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

Выполняет поиск последнего индекса любого из указанных значений аналогичного вызову LastIndexOf несколько раз с помощью логического оператора ИЛИ.Searches for the last index of any of the specified values similar to calling LastIndexOf several times with the logical OR operator.

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

Выполняет поиск последнего индекса любого из указанных значений аналогичного вызову LastIndexOf несколько раз с помощью логического оператора ИЛИ.Searches for the last index of any of the specified values similar to calling LastIndexOf several times with the logical OR operator.

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

Определяет, перекрываются ли диапазон и диапазон только для чтения в памяти.Determines whether a span and a read-only span overlap in memory.

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

Определяет, перекрываются ли диапазон и диапазон только для чтения в памяти, и выводит смещение элементов.Determines whether a span and a read-only span overlap in memory and outputs the element offset.

Reverse<T>(Span<T>) Reverse<T>(Span<T>) Reverse<T>(Span<T>) Reverse<T>(Span<T>)

Изменяет порядок элементов во всем массиве на обратный.Reverses the sequence of the elements in the entire span.

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

Определяет относительный порядок диапазона и диапазона только для чтения путем сравнения их элементов с помощью IComparable{T}.CompareTo (T).Determines the relative order of a span and a read-only span by comparing the elements using IComparable{T}.CompareTo(T).

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

Определяет, равны ли диапазон и диапазон только для чтения, сравнивая элементы с помощью IEquatable{T}.Equals (T).Determines whether a span and a read-only span are equal by comparing the elements using IEquatable{T}.Equals(T).

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

Определяет, отображается ли указанная последовательность в начале диапазона.Determines whether a specified sequence appears at the start of a span.

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

Удаляет все начальные и конечные вхождения указанного элемента из диапазона.Removes all leading and trailing occurrences of a specified element from a span.

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

Удаляет все начальные и конечные вхождения набора элементов, указанного в диапазоне только для чтения, из диапазона.Removes all leading and trailing occurrences of a set of elements specified in a read-only span from a span.

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

Удаляет все конечные вхождения указанного элемента из диапазона.Removes all trailing occurrences of a specified element from a span.

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

Удаляет все конечные вхождения набора элементов, указанного в диапазоне только для чтения, из диапазона.Removes all trailing occurrences of a set of elements specified in a read-only span from a span.

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

Удаляет все начальные вхождения указанного элемента из диапазона.Removes all leading occurrences of a specified element from the span.

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

Удаляет все начальные вхождения набора элементов, указанного в диапазоне только для чтения, из диапазона.Removes all leading occurrences of a set of elements specified in a read-only span from the span.

Применяется к