2010-01-16 42 views
0

中的数组值我遇到了一些我无法理解的奇怪行为,不知道有人能帮助我理解它。
的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; 
      } 
     } 

的follwing方法调用上述方法:

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); 
    } 

我预期输入数组中的值将是在第一个方法范围外改变,但实际结果是值保持不变,任何解释?
谢谢叶兰

回答

1

您需要通过引用传递数组,而不是由价值

http://msdn.microsoft.com/en-us/library/0f66670z%28VS.71%29.aspx

+1

你能解释一下为什么吗?数组没有引用他保存的值? 我描述的行为并不适合示例4在你的链接和冲突我不明白 – Eran 2010-01-16 15:35:36

+2

除非我错过了什么,你给的链接说,Eran的代码*应该*改变数组。 – sepp2k 2010-01-16 15:41:27

5

任何解释

当然,我能想到很多解释的。

1)gridView为null。

2)gridView.DataSource不是调用的TryParse被返回false的一个DataTable

3)一个。 (注意:您可能打算使用& &,而不是&。)

4)列不符合INVEST,UNITS或PRICE。

5)写入数组的值与已经存在的值相同。

以上任何一种都可以解释你的观察。

+0

我可以在第一种方法中看到更改,但它们未反映在方法范围之外...... – Eran 2010-01-16 15:46:40

+0

您如何看到第一种方法的更改?他们如何不反映在方法之外? – 2010-01-16 16:27:04

+0

我在第一个方法中添加了breack指针,并在方法范围中看到了值的变化,我甚至试图返回数组,返回的数组很好,但我无法理解为什么我应该在值更改时重新调用它应该反映在方法之外 – Eran 2010-01-16 16:54:37