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には以下の結果が表示されます。
上記のコードを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