DelphiのMove関数と同じ動作をC#で実装する (配列の場合) - C#

DelphiのMove関数をC#に移植する場合の例です。

移植コード例

Delphiで下記のコードを移植する場合を考えます。
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  a:array [0..9] of integer;
begin
  a[0]:=0;
  a[1]:=1;
  a[2]:=2;
  a[3]:=3;
  a[4]:=4;
  a[5]:=5;
  a[6]:=6;
  a[7]:=7;
  a[8]:=8;
  a[9]:=9;

  Move(a[5], a, sizeof(integer)*3);
  for i:=0 to 9 do begin
    Memo1.Lines.Add(IntToStr(a[i]));
  end;
end;

上記のプログラムを実行すると Memo1には以下の結果が表示されます。
5
6
7
3
4
5
6
7
8
9
上記のコードをC#に移植します。

手順

C#では配列のコピーをする場合は配列のCopyTo()メソッドが使えますが、CopyTo()メソッドではコピー先やコピー元のコピー開始位置を指定できないため、Array.Copy()メソッドを利用します。 C#に移植したコードは以下のとおりです。
    private void button1_Click(object sender, EventArgs e)
    {
      int i;
      int[] a = new int[10];

      a[0]=0;
      a[1]=1;
      a[2]=2;
      a[3]=3;
      a[4]=4;
      a[5]=5;
      a[6]=6;
      a[7]=7;
      a[8]=8;
      a[9]=9;

      Array.Copy(a,5, a, 0, 3);
      for (i = 0; i < 10; i++) {
        textBox1.Text += a[i].ToString() + "\r\n";
      }
    }

上記のプログラムを実行すると、先のプログラムの実行結果と同じ結果が得られます。

補足

ちなみに下記のコードの場合
  Move(a, b, sizeof(integer)*Length(a));

移植するコードは次の通りです。
  Array.Copy(a, 0, b, 0, a.Length);
または
  Array.Copy(a, b, a.Length);

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-07
作成日: 2010-01-19
iPentec all rights reserverd.