C#7.2 以降で使えます。.NET Core2.0以前ならSystem.Memoryというパッケージが必要です。
配列やコレクションやストリームやその他諸々の連続した領域の一部に効率的にアクセスできるための機能です。 .NET 5では標準パッケージに載る機能なので、普通に使われるようになるかもしれません。
var array = new[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var span = new Span<int>(array, 5, 2);
for (int i = 0; i < span.Length; i++)
span[i] = 10;
// 0, 1, 2, 3, 4, 10, 10, 7, 8, 9
詳細は以下の記事などをご参照下さい。
![](https://dotnetcsharptips.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png)
Span 構造体 (System)
任意のメモリの連続した領域のタイプ セーフでメモリ セーフな表現を提供します。
![](https://dotnetcsharptips.com/wp-content/uploads/cocoon-resources/blog-card-cache/2750222e9326c05150051bbce6406be1.png)
Span構造体
概要 Ver. 7.2 Span構造体(System名前空間)は、span (区間、範囲)という名前通り、連続してデータが並んでいるもの(配列など)の一定範囲を読み書きするために使う型です。 この…
![](https://dotnetcsharptips.com/wp-content/uploads/cocoon-resources/blog-card-cache/67d217100c3237e5eb6d5618b30cfbce.gif)
Span<T>構造体
Span型は「連続したメモリ領域とその操作」を抽象化して、元のメモリ領域の種類によらず、それらを統一的かつ効率的に扱えるようにするもの。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9U3BhbiUzQ1QlM0UlRTMlODIlOTIlRTQlQkQlQkYlRTMlODElODYlRTMlODElQjklRTMlODElOEQ1JUUzJTgxJUE0JUUzJTgxJUFFJUU3JTkwJTg2JUU3JTk0JUIxJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1jOTg4YmQ4OWQ0YWY0ODkwMmNjMDk2NmY5Y2M5ZWM1Ng&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwYWthLW5zZSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9MzFiZTU4MzA1ZGI2YTY2NzkwZDMyOGYxMzRiYmI2YmI&blend-x=142&blend-y=491&blend-mode=normal&s=0458919230e2868505eede7a69378545)
Spanを使うべき5つの理由 - Qiita
C# 7.2からSpan構造体というのが使えるようになって、こいつが結構すごいやつなんだが、いかんせん日本語記事が少ない。なら自分で書いて広めるしかないんじゃい!ということで、なんとなくでも凄さが伝…
![](https://dotnetcsharptips.com/wp-content/uploads/cocoon-resources/blog-card-cache/b4d7308f1e519c40e4d8edc92be06185.png)
構造体型 - C# リファレンス - C#
C# での構造体型について
![](https://dotnetcsharptips.com/wp-content/uploads/cocoon-resources/blog-card-cache/b4d7308f1e519c40e4d8edc92be06185.png)
stackalloc 式 - ヒープではなく、スタック上に変数ストレージを割り当てます - C#
C# の stackalloc 式を使うと、スタックにメモリ ブロックを割り当てることができます。 stackalloc メモリは、このメソッドが戻ったときに自動的に破棄されます。