更改方法中的数组值

时间:2010-01-16 15:28:41

标签: c#

我遇到了一些我无法理解的奇怪行为,我想知道是否有人可以帮助我理解它 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);
    }

我预计输入数组中的值也会在第一个方法范围之外更改,但实际结果是值是否保持相同的任何解释?
谢谢伊兰

2 个答案:

答案 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