Question
データテーブル変数をコピーしたが、コピー先の変数をクリアするとコピー元の変数の内容もクリアされてしまいます。
Answer
.NET の仕様ではクラス型に対する変数は値ではなく参照を保持します。
そのため、データテーブル変数はデータテーブル オブジェクトの値そのものではなく参照を保持する変数となります。
データテーブル変数を他のデータテーブル変数に代入した場合、代入後の変数の差し示すオブジェクトは元のデータテーブル変数と同じものとなります。
そのため、代入後の変数をクリアすると元のデータテーブル変数の内容もクリアされます。
変数の内容の複製を作成する場合は、DataTable.Copyを使用し複製を作成する必要があります。
- 変数を代入後にクリア
![]()
- 変数のコピーを作成し代入後クリア
![]()