Посмотрите на следующий пример:
public void inc(int num) {
num++;
}
int a = 5;
inc(a);
В этом случае inc
не будет увеличивать саму переменную a
.Он не указывает на то же место в памяти.Чтобы изменить a
, мне нужно будет использовать ref
.
Однако в этом примере
public static void ExportSelectedRow(GridView gridView, object toObject, int skipCols)
{
GridViewRow gridViewRow = gridView.SelectedRow;
if (toObject is DataTable)
{
DataTable returnDt = (DataTable)toObject;
GridViewColsToDatatable(gridView, returnDt, skipCols);
DataRow dr = returnDt.NewRow();
for (int i = skipCols; i < gridViewRow.Cells.Count; i++)
dr[i - skipCols] = gridViewRow.Cells[i].Text;
returnDt.Rows.Add(dr);
}
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) {
DataTable dt = new DataTable();
GridViewHelper.ExportSelectedRow(GridView1, dt, 1);
...
}
выбранная строка будет экспортирована из GridView1
вDataTable
хотя я даже не упоминал об этом в функции.Так что toObject
будет обновлено.Кажется, что
DataTable returnDt = (DataTable)toObject;
фактически ссылается на toObject
.Поэтому мой вопрос, почему в этом примере это ссылка, а в первом - нет?