C# - よく使うクラス - System.Runtime - Buffer

 クラウディア
1. 概要
2. BlockCopy

1. 概要

 「Buffer」は、参考サイトによれば「プリミティブ型の配列を操作します。」と、ぱっと読んだだけでは、少なくともわたりには理解しにくい。  本ページは、下記のサイトを参考にさせていただきました。
Buffer クラス (System) 」
「【.NET】指定した範囲で配列をコピーする方法の速度比較【C# 配列】

2. BlockCopy

 「BlockCopy」というメソッドがありまして。  参考サイトには「コピー先の配列の指定したオフセット位置を先頭として、コピー元の配列の指定したオフセットから指定数のバイトをコピーします。」と書いてあります。  配列から、配列へのコピーを行うものであります。

public static void BlockCopy (Array src, int srcOffset, Array dst, int dstOffset, int count);
 「src」がコピー元で、「srcOffset」がコピー元の開始バイト位置。  「dst」がコピー先で、「dstOffset」がコピー先の開始バイト位置。  「count」というのがバイト数になります(「count」という付け方もどうだか・・・)。

using System;
using System.Runtime;

public class Program
{
    static public void Main ()
    {
		int[] all   = new int []{ 1, 2, 3, 4, 5, 6 };
		int[] first = new int[3];
		int[] last  = new int[3];

		Buffer.BlockCopy(all, 0, first, 0, sizeof(int) * first.Length);
		Buffer.BlockCopy(all, sizeof(int) * first.Length, last, 0, sizeof(int) * last.Length);

		for (int i=0; i<first.Length; i++)
		{
			Console.WriteLine("first["+ i +"] = "+ first[i] +"");
		}

		for (int i=0; i<last.Length; i++)
		{
			Console.WriteLine("last ["+ i +"] = "+ last[i] +"");
		}
    }
}
 てなソースを書いて、ビルド後、実行すると下記の結果が得られます。

first[0] = 1
first[1] = 2
first[2] = 3
last [0] = 4
last [1] = 5
last [2] = 6