2010-01-16 94 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