我遇到了一些我无法理解的奇怪行为,我想知道是否有人可以帮助我理解它 follwing方法重新获取一个对象数组并在数组成员中进行一些更改
public static void adjustRow(object[] row, String column)
{
Double price ,units ,invest;
if (!(Double.TryParse(row[3].ToString(),out price)
& Double.TryParse(row[4].ToString(),out units)
& Double.TryParse(row[5].ToString(),out invest)))
return ;
switch (column)
{
case INVEST: row[4] = Math.Round(invest / price,2); break;
case UNITS:
case PRICE: row[5] = Math.Round(units * price,2); break;
}
}
以下方法调用上述方法:
void editGrids_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DataGridView gridView = sender as DataGridView;
DataTable source= null;
if (gridView != null)source = gridView.DataSource as DataTable;
if (source != null)
Systm.adjustRow(source.Rows[e.RowIndex].ItemArray,gridView.Columns [e.ColumnIndex].HeaderText);
}
我预计输入数组中的值也会在第一个方法范围之外更改,但实际结果是值是否保持相同的任何解释?
谢谢伊兰
答案 0 :(得分:5)
任何解释
当然,我可以想到很多解释。
1)gridView为空。
2)gridView.DataSource不是DataTable
3)对TryParse的一次调用返回false。 (注意:您可能打算使用&&,not&。)
4)专栏与INVEST,UNITS或PRICE不匹配。
5)写入数组的值与已存在的值相同。
以上任何一项都可以解释你的观察结果。
答案 1 :(得分:1)
您需要按引用传递数组,而不是按值传递
http://msdn.microsoft.com/en-us/library/0f66670z%28VS.71%29.aspx