C# - ReadOnlySequence<T> .. : 네이버블로그


요글 보다가 만듬.


.NET Lab


#:package DotNext.IO@5.26.1
using System;
using System.Buffers;
using DotNext.Buffers;

byte[] b;
var seq = new ReadOnlyMemory<byte>[]
{
    b = [1,2,3,4],
    b = [5,6,7,8],
}.ToReadOnlySequence();

foreach(var v in new SequenceReader<byte>(seq))
    Console.Write(v);

b = [..new SequenceReader<byte>(seq)];
Console.Write(new { b.Length });

static class SequenceReaderExtensions
{
    public static Enumerator<T> GetEnumerator<T>(this SequenceReader<T> sr)
        where T : unmanaged, IEquatable<T> => new(sr);
    public ref struct Enumerator<T>(SequenceReader<T> sr) where T : unmanaged, IEquatable<T>
    {
        SequenceReader<T> sr = sr;
        public bool MoveNext() => sr.TryPeek(out _);
        public ref readonly T Current
        {
            get
            {
                try{ return ref sr.CurrentSpan[sr.CurrentSpanIndex]; }
                finally { sr.TryRead(out _); }
            }
        }
    }
}