rksoftware

Visual Studio とか C# とかが好きです

C# 2.0 以降の新機能の確認 - C# 7.2 - Span<T> 構造体

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 と出力される