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

このページのタグ:[C#] [Delphi]
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);
となります。

登録日 :2010-01-19    最終更新日 :2011-02-16
このページのタグ:[C#] [Delphi]
Japanese
プライバシー    iPentecについて
iPentec all rights reserverd. (ISDC)