StringBuilder.GetChunks メソッド


この StringBuilder インスタンスから作成された ReadOnlyMemory<Char> で表される文字のチャンクを反復処理する目的で利用できるオブジェクトを返します。Returns an object that can be used to iterate through the chunks of characters represented in a ReadOnlyMemory<Char> created from this StringBuilder instance.

 System::Text::StringBuilder::ChunkEnumerator GetChunks();
public System.Text.StringBuilder.ChunkEnumerator GetChunks ();
member this.GetChunks : unit -> System.Text.StringBuilder.ChunkEnumerator
Public Function GetChunks () As StringBuilder.ChunkEnumerator



ReadOnlyMemory<Char> のチャンクの列挙子。An enumerator for the chunks in the ReadOnlyMemory<Char>.


次のようなコードを使用して、メモリ範囲内のチャンクを反復処理できます。You can iterate the chunks in the memory range with code like the following:

foreach (ReadOnlyMemory<char> chunk in sb.GetChunks())
    foreach(char ch in chunk.Span)
        { /* operations on ch */ }

このメソッドの目的は、 定数 のデータを効率的に抽出することです StringBuilderThe purpose of this method is to efficiently extract the data of a constant StringBuilder. チャンクの StringBuilder 列挙が不完全なときにが変更された場合、結果は未定義になります。If the StringBuilder is modified while the chunk enumeration is incomplete, the result is undefined. StringBuilder もスレッドセーフではないため、同時実行スレッドでの操作は無効です。StringBuilder is also not thread-safe, so operating on it with concurrent threads is illegal.

ReadOnlyMemory<T>が変更された場合、返されるチャンクは変更されないという保証はありません StringBuilder 。そのため、後で使用できるようにキャッシュをキャッシュしないでください。The ReadOnlyMemory<T> chunks returned are not guaranteed to remain unchanged if the StringBuilder is modified, so do not cache them for later use.

ReadOnlySpan<T> ReadOnlyMemory<T> (前の例のメソッドと同様に) からを作成すると、 ReadOnlyMemory<T>.Span コストが高くなります。そのため、入れ子になったステートメントで使用する必要がある場合は、スパンのローカル変数を作成し for ます。Creating a ReadOnlySpan<T> from a ReadOnlyMemory<T> (as the ReadOnlyMemory<T>.Span method does in the previous example) is expensive, so create a local variable for the span if you need to use it in a nested for statement. 次に例を示します。For example:

foreach (ReadOnlyMemory<char> chunk in sb.GetChunks())
    var span = chunk.Span;
    for(int i = 0; i < span.Length; i++)
        /* operations on span[i] */