C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。
Span 構造体
https://docs.microsoft.com/ja-jp/dotnet/standard/memory-and-spans/memory-t-usage-guidelines
配列(など)の一部の範囲を切り出して値の参照を持てる。
var ary = Enumerable.Range(1, 10).ToArray(); var span = new Span<int>(ary, 2, 3); var readonlySpan = (ReadOnlySpan<int>)span; for (int i = 0; i < readonlySpan.Length; i++) Console.WriteLine(readonlySpan[i]); // 3 // 4 // 5 と出力される span[0] = 11; Console.WriteLine(readonlySpan[0]); // コピーでなく参照を持っているため 11 と出力される // readonlySpan[0] = 21; ← ReadOnlySpan<T> なのでこれはエラー ary[2] = 31; Console.WriteLine(readonlySpan[0]); // コピーでなく参照を持っているため 31 と出力される