2013-10-08 178 views
0

我有從網格的DataRow,我需要修改一行中的幾列。所以我把我所有的列放在Array中,並嘗試修改它們,但它不起作用。我需要一個解釋。爲什麼修改一個對象數組不會改變我的對象?

我的目標是在數組或某些集合中按特定順序獲取所有列,然後修改它們等。我想我現在創建了一些引用除列之外的其他內容的新對象。也許我應該嘗試在收藏中存儲一些參考?使用ref應該是最好的選擇?

DataRow dr = rows[i] as DataRow; 
dr["size"] = 5000; // => size is 5000; 
ChangeSize(dr); // => size is 6000; 

ChangeSize體

private void ChangeSize(DataRow dataRow) 
{ 
      dataRow["size"] = 6000; // => size is 6000 
      Object[] arrayOfColumns= { dataRow["size"], ... }; 
      arrayOfColumns[0] = 7000; // => won't change size... 

} 

回答

1

只是改變數組中的值。您恰好通過dataRow["size"]初始化了這一點,但這並不意味着兩者之間存在任何永久鏈接。

如果您需要更改被反射回DataRow,我懷疑你應該有另一種方法來做到這一點:

private void CopyToDataRow(Object[] source, DataRow target) 
{ 
    target["size"] = source[0]; 
    // etc 
} 

每當一個數組被修改有沒有引發類似這樣的定製代碼的概念 - 你需要在適當的時候打電話給他。 (並且,不,ref根本無法幫到你。)

+0

我在我的應用程序中使用該方法。很高興聽到裁判沒有幫助。 – boski

1

dataRow [「size」]包含一個int類型的值。

當你instanciate和初始化arrayOfColumns時,你會得到dataRow [「size」]中包含的值的一個副本,而不是一個引用。

+0

有沒有什麼辦法來初始化與該對象參考數組?或者我應該複製下面的Jon Skeet所寫的值? – boski

+0

在這種情況下,您不能使用ref。正如Jon Skeet注意到的那樣,您應該使用額外的方法來更新值 – AlexH

相關問題