byrefの質問にバリアントがあります。refまたはパラメーターを使用して呼び出すことと、それが変数とその値にどのように影響するかについては、すべて知っています。DataTableでこの問題が発生しましたが、データテーブルが単純な整数変数と異なる理由を知りたいです。
私は問題を解決する方法について物理的な答えを持っていますが、なぜそれがそのように機能するのか知りたいです。
単純な変数を使用すると、私が期待したことを実行します
int mVar1 = 1;
int mVar2 =1;
mVar2 = mVar1;
mVar2 = 5;
Console.WriteLine(mVar1.ToString());
Console.WriteLine(mVar2.ToString());
コンソールに1.5が表示されます。
ただし、DataTableで同じことを行うと、新しい値ではなく、最初のデータテーブルへの参照が作成されます。
DataTable mVar3 = new DataTable();
DataTable mVar4 = new DataTable();
// Create DataColumn objects of data types.
DataColumn colString = new DataColumn("StringCol");
colString.DataType = System.Type.GetType("System.String");
mVar3.Columns.Add(colString);
// Create DataColumn objects of data types.
DataColumn colString2 = new DataColumn("StringCol123");
colString2.DataType = System.Type.GetType("System.String");
mVar4.Columns.Add(colString2);
foreach (DataColumn tCol in mVar3.Columns)
{
Console.WriteLine(tCol.ColumnName);
}
foreach (DataColumn tCol in mVar4.Columns)
{
Console.WriteLine(tCol.ColumnName);
}
mVar4 = mVar3;
//change mVar4 somehow and see if mVar3 changes
foreach (DataColumn tCol in mVar4.Columns)
{
tCol.ColumnName = "Test";
}
foreach (DataColumn tCol in mVar3.Columns)
{
Console.WriteLine(tCol.ColumnName);
}
foreach (DataColumn tCol in mVar4.Columns)
{
Console.WriteLine(tCol.ColumnName);
}
コンソールに次のように表示されます。StringColStringCol123テストテスト
mVar4 = mVar3と言うと、mVar4がmVar3への参照になります。
この問題の解決策は言うことです
DataTable mVar4 = mVar3.Copy();
だから私の質問は:データテーブルが単純な整数フィールドとは異なる動作をする原因は何ですか?DataTableの別のコピーの代わりにmVar4=mVar3を使用すると、なぜ参照が作成されるのですか?