У меня есть вариант по вопросу ref. Я знаю все о вызове с помощью ref или наших параметров и как он влияет на переменные и их значения. У меня была эта проблема с DataTable, и я хочу знать, почему datatable отличается от простой целочисленной переменной.другой вопрос вопрос используя простой =
У меня есть физический ответ о том, как исправить проблему, но я хочу знать, почему она работает так, как она делает.
Если вы используете простые переменные это то, что я ожидал
int mVar1 = 1;
int mVar2 =1;
mVar2 = mVar1;
mVar2 = 5;
Console.WriteLine(mVar1.ToString());
Console.WriteLine(mVar2.ToString());
отображает 1,5 в консоли.
НО если вы делаете то же самое с DataTable он делает ссылку на первый 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);
}
консоли отображается: StringCol StringCol123 Тест Тест
, произнеся mVar4 = mVar3, он вызывает mVar4 как ссылку на mVar3.
Решение этой проблемы есть
DataTable mVar4 = mVar3.Copy();
Так что мой вопрос: Что вызывает DataTable выполнить иначе, чем простое целочисленное поле. Почему он создает ссылку, когда я использую mVar4 = mVar3 вместо другой копии DataTable?
Мне нравится статья MSDN как он объясняет, что-то типа. И теперь я вижу, что, когда я нависаю над типом данных DataTable в visual studio, он говорит, что класс DataTable, который согласно статье MSDN является ссылочным типом. Благодарим вас за эту информацию, это все объясняет! Обратите внимание, что у datatable уже есть метод копирования. –