深いコピーと浅いコピーに関する私の理解が正しければ、私の質問は不可能です。配列 (a[10]) があり、浅いコピー (b[20]) を実行する場合、b のデータが連続していないため、これは不可能ではないでしょうか?
私がこれを完全に間違っている場合、配列のサイズを変更するために再割り当てを行うc ++の機能を(c#で)模倣する迅速な方法を誰かがアドバイスできます。
注
System.Array オブジェクトの .Clone() および .Copy() メンバーを見ています。
深いコピーと浅いコピーに関する私の理解が正しければ、私の質問は不可能です。配列 (a[10]) があり、浅いコピー (b[20]) を実行する場合、b のデータが連続していないため、これは不可能ではないでしょうか?
私がこれを完全に間違っている場合、配列のサイズを変更するために再割り当てを行うc ++の機能を(c#で)模倣する迅速な方法を誰かがアドバイスできます。
注
System.Array オブジェクトの .Clone() および .Copy() メンバーを見ています。
既存の配列のサイズを変更することはできませんが、次を使用できます。
Array.Resize(ref arr, newSize);
これにより、新しい配列が割り当てられ、データが古い配列から新しい配列にコピーされ、arr変数が更新されます (この場合は参照によって渡されます)。そうですか?
ただし、古い配列を指している他の参照は更新されません。より良いオプションは、使用するList<T>ことです。手動でサイズを変更する必要はなく、古い参照の問題もありません。Add/などだけですRemove。通常、配列を直接使用することはあまりありません。それらには用途がありますが、デフォルトのケースではありません。
あなたのコメントを再;
List<T>しません。これは、ジェネリックに関するポイントの 1 つです。ボンネットの下にList<T>はラッパーがありT[]、 aにはボクシングList<int>がありません。int[]古いArrayListものは のラッパーobject[]であるため、ボックスを実行します。もちろん、ボクシングはあなたが思っているほど悪くはありません。Array.Resize; Tに使用Buffer.BlockCopyList<T>実装しない限り、より迅速になります)。List<T>